如何使用 gensim fasttext wrapper 训练词嵌入表示?
How to train a word embedding representation with gensim fasttext wrapper?
我想用 fatext 训练我自己的词嵌入。但是,在按照教程进行操作后,我无法正确地做到这一点。到目前为止我试过:
在:
from gensim.models.fasttext import FastText as FT_gensim
# Set file names for train and test data
corpus = df['sentences'].values.tolist()
model_gensim = FT_gensim(size=100)
# build the vocabulary
model_gensim.build_vocab(sentences=corpus)
model_gensim
输出:
<gensim.models.fasttext.FastText at 0x7f6087cc70f0>
在:
# train the model
model_gensim.train(
sentences = corpus,
epochs = model_gensim.epochs,
total_examples = model_gensim.corpus_count,
total_words = model_gensim.corpus_total_words
)
print(model_gensim)
输出:
FastText(vocab=107, size=100, alpha=0.025)
但是,当我尝试查看词汇表时:
print('return' in model_gensim.wv.vocab)
我得到 False
,即使这个词出现在我传递给快速文本模型的句子中。另外,当我检查与 return 最相似的词时,我得到的字符是:
model_gensim.most_similar("return")
[('R', 0.15871645510196686),
('2', 0.08545402437448502),
('i', 0.08142799884080887),
('b', 0.07969795912504196),
('a', 0.05666942521929741),
('w', 0.03705815598368645),
('c', 0.032348938286304474),
('y', 0.0319858118891716),
('o', 0.027745068073272705),
('p', 0.026891689747571945)]
gensim 的 fasttext wrapper 的正确使用方法是什么?
gensim FastText
class 不将纯字符串作为其训练文本。它期望 lists-of-words,而不是。如果您传递纯字符串,它们将看起来像 lists-of-single-characters,并且您会得到一个像您所看到的发育不良的词汇。
将 corpus
的每个项目标记为 list-of-word-tokens,您将获得 closer-to-expected 结果。一种 super-simple 方法可能只是:
corpus = [s.split() for s in corpus]
但是,通常您还想做其他事情来正确标记 plain-text – 也许 case-flatten,或者用标点符号等做其他事情
为了查看词汇,应将词汇写入文本文件,以便从该文本文件中可见。 This 可能对您有帮助:
with open("vocab.txt", "w", encoding="utf8") as vocab_out:
for word in model_gensim.wv.vocab:
vocab_out.write(word + "\n")
我想用 fatext 训练我自己的词嵌入。但是,在按照教程进行操作后,我无法正确地做到这一点。到目前为止我试过:
在:
from gensim.models.fasttext import FastText as FT_gensim
# Set file names for train and test data
corpus = df['sentences'].values.tolist()
model_gensim = FT_gensim(size=100)
# build the vocabulary
model_gensim.build_vocab(sentences=corpus)
model_gensim
输出:
<gensim.models.fasttext.FastText at 0x7f6087cc70f0>
在:
# train the model
model_gensim.train(
sentences = corpus,
epochs = model_gensim.epochs,
total_examples = model_gensim.corpus_count,
total_words = model_gensim.corpus_total_words
)
print(model_gensim)
输出:
FastText(vocab=107, size=100, alpha=0.025)
但是,当我尝试查看词汇表时:
print('return' in model_gensim.wv.vocab)
我得到 False
,即使这个词出现在我传递给快速文本模型的句子中。另外,当我检查与 return 最相似的词时,我得到的字符是:
model_gensim.most_similar("return")
[('R', 0.15871645510196686),
('2', 0.08545402437448502),
('i', 0.08142799884080887),
('b', 0.07969795912504196),
('a', 0.05666942521929741),
('w', 0.03705815598368645),
('c', 0.032348938286304474),
('y', 0.0319858118891716),
('o', 0.027745068073272705),
('p', 0.026891689747571945)]
gensim 的 fasttext wrapper 的正确使用方法是什么?
gensim FastText
class 不将纯字符串作为其训练文本。它期望 lists-of-words,而不是。如果您传递纯字符串,它们将看起来像 lists-of-single-characters,并且您会得到一个像您所看到的发育不良的词汇。
将 corpus
的每个项目标记为 list-of-word-tokens,您将获得 closer-to-expected 结果。一种 super-simple 方法可能只是:
corpus = [s.split() for s in corpus]
但是,通常您还想做其他事情来正确标记 plain-text – 也许 case-flatten,或者用标点符号等做其他事情
为了查看词汇,应将词汇写入文本文件,以便从该文本文件中可见。 This 可能对您有帮助:
with open("vocab.txt", "w", encoding="utf8") as vocab_out:
for word in model_gensim.wv.vocab:
vocab_out.write(word + "\n")