在这个关于 fastText 的视频的15:10,它提到了句法类比和语义类比。但我不确定它们之间有什么区别。
有人可以帮助解释示例的区别吗?
我只想知道 alpha 的值在 gensimword2vec
和fasttext
word-embedding 模型中的作用?我知道 alpha 是initial learning rate
,它的默认值是0.075
表单 Radim 博客。
如果我将其更改为更高的值,即 0.5 或 0.75 会怎样?它的作用会是什么?是否允许更改相同?但是,我已将其更改为 0.5 并在 D = 200、window = 15、min_count = 5、iter = 10、workers = 4 的大型数据上进行实验,结果对于 word2vec 模型非常有意义。然而,使用 fasttext 模型,结果有点分散,意味着相关性较低和不可预测的高低相似性分数。
为什么对于具有不同精度的两种流行模型,相同数据的结果不精确?的值alpha
在模型构建过程中是否起着如此重要的作用?
任何建议表示赞赏。
我正在构建一个机器学习模型,它将处理文档并从中提取一些关键信息。为此,我需要使用词嵌入进行 OCRed 输出。我有几种不同的嵌入选项(Google 的 word2vec、Stanford 的、Facebook 的 fastText),但我主要担心的是 OOV 单词,因为 OCR 输出会有很多拼写错误的单词。例如,我想要嵌入使得嵌入和嵌入(OCR 遗漏的 e)的输出应该具有一定程度的相似性。我不太关心相关的上下文信息。
我选择了 Facebook 的 fastText,因为它也提供了 OOV 单词的嵌入。我唯一关心的是嵌入的大小。fastText的模型的向量大小是300,有没有办法减少返回的词向量的大小?我正在考虑使用 PCA 或任何其他降维技术,但考虑到词向量的大小,这可能是一项耗时的任务。
我使用 Python 接口在 FastText 中训练了一个监督模型,并且在精确度和召回率方面得到了奇怪的结果。
首先,我训练了一个模型:
model = fasttext.train_supervised("train.txt", wordNgrams=3, epoch=100, pretrainedVectors=pretrained_model)
Run Code Online (Sandbox Code Playgroud)
然后我得到测试数据的结果:
def print_results(N, p, r):
print("N\t" + str(N))
print("P@{}\t{:.3f}".format(1, p))
print("R@{}\t{:.3f}".format(1, r))
print_results(*model.test('test.txt'))
Run Code Online (Sandbox Code Playgroud)
但结果总是很奇怪,因为它们显示的精度和召回率 @1 是相同的,即使对于不同的数据集也是如此,例如一个输出是:
N 46425
P@1 0.917
R@1 0.917
Run Code Online (Sandbox Code Playgroud)
然后,当我寻找每个标签的精确度和召回率时,我总是得到“nan”的召回率:
N 46425
P@1 0.917
R@1 0.917
Run Code Online (Sandbox Code Playgroud)
输出是:
{'__label__1': {'precision': 0.9202150724134941, 'recall': nan, 'f1score': 1.8404301448269882}, '__label__5': {'precision': 0.9134956983264135, 'recall': nan, 'f1score': 1.826991396652827}}
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会发生这种情况?
PS:要尝试此行为的可重现示例,请参阅https://github.com/facebookresearch/fastText/issues/1072并使用 FastText 0.9.2 运行它
nlp python-3.x text-classification precision-recall fasttext
我试图用来cython
包装一个C++库(fastText
如果相关的话).C++库类从磁盘加载一个非常大的数组.我的包装器从C++库中实例化一个类来加载数组,然后使用cython
内存视图并将numpy.asarray
数组转换为numpy
数组,然后调用torch.from_numpy
以创建张量.
出现的问题是如何处理为阵列释放内存.
现在,我得到pointer being freed was not allocated
程序退出时.我希望这是因为C++代码和numpy
/ pytorch
都试图管理同一块RAM.
我可以简单地在C++库中注释掉析构函数,但这感觉就像它将导致我在路上遇到不同的问题.
我该如何处理这个问题?是否有任何关于如何使用C++处理内存共享的最佳实践文档cython
?
如果我修改C++库来包装在一个阵列shared_ptr
,将cython
(和numpy
,pytorch
等)共享shared_ptr
正确?
如果问题是天真的,我道歉; Python垃圾收集对我来说非常神秘.
任何建议表示赞赏.
我想使用 fasttext 预训练模型来计算一组句子之间的相似度。谁能帮我?最好的方法是什么?
我通过训练 tfidf 模型来计算句子之间的相似度。像这样编写代码。是否可以更改它并使用 fasttext 预训练模型?例如使用向量来训练 tfidf 模型?
def generate_tfidf_model(sentences):
print("generating TfIdf model")
texts = [[sentence for sentence in doc.split()] for doc in sentences]
dictionary = gensim.corpora.Dictionary(texts)
feature_cnt = len(dictionary.token2id)
mycorpus = [dictionary.doc2bow(doc, allow_update=True) for doc in texts]
tfidf_model = gensim.models.TfidfModel(mycorpus)
index = gensim.similarities.SparseMatrixSimilarity(tfidf_model[mycorpus]
, num_features = feature_cnt)
return tfidf_model, index, dictionary
def query_search(query, tfidf_model, index, dictionary):
query = normal_stemmer_sentence(query)
query_vector = dictionary.doc2bow(query.split())
similarity = index[tfidf_model[query_vector]]
return similarity
Run Code Online (Sandbox Code Playgroud) python nlp information-retrieval sentence-similarity fasttext
阅读《高效文本分类技巧袋》后,我有点困惑。wordNgrams
args和minn
之间有什么区别maxn
例如,文本分类任务和 Glove 嵌入为 pretrainedVectors
ft.train_supervised(file_path,lr=0.1,epoch=5,wordNgrams=2,dim=300,loss='softmax', minn=2,maxn=3,pretrainedVectors='glove.300d.txt',verbose=0)
Run Code Online (Sandbox Code Playgroud)
输入句子是“我爱你”。给定minn=2,maxn=3,整个句子转化为[<I, I>], [<l, <lo, lo, lov,.....]
etc 对于love这个词,它的fasttext嵌入= (emb(love)(作为一个完整的词)+ emb(<l)+emb(<lo)+。 ...) / n. 对于句子,它被分成[I love, love you]
(因为 wordNgrams=2) 并且这些 2-gram 嵌入是[(fasttext emb(I)+fasttext emb(love))/2, (fasttext emb(love)+fasttext emb(you))/2]
。句子嵌入是 2-gram 嵌入的平均值,维数为 300。然后它通过具有 #labels 神经元的层(即乘以大小为 [300, #labels] 的矩阵)。
这是正确的吗?如果我错了请纠正我
我想将数据帧转换为 fasttext 格式
我的数据框
text label
Fan bake vs bake baking
What's the purpose of a bread box? storage-method
Michelin Three Star Restaurant; but if the chef is not there restaurant
Run Code Online (Sandbox Code Playgroud)
快速文本格式
__label__baking Fan bake vs bake
__label__storage-method What's the purpose of a bread box?
__label__restaurant Michelin Three Star Restaurant; but if the chef is not there
Run Code Online (Sandbox Code Playgroud)
我尝试过df['label'].apply(lambda x: '__label__' + x).add_suffix(df['text'])
,但它没有按我的预期工作。我应该如何更改我的代码?
您好,我有一个包含文本的数据框列。我想使用 fasttext 模型来进行预测。我可以通过将文本数组传递给 fasttext 模型来实现此目的。
import fasttext
d = {'id':[1, 2, 3], 'name':['a', 'b', 'c']}
df = pd.DataFrame(data=d)
Run Code Online (Sandbox Code Playgroud)
我从系列中删除了“\n”
name_list = df['name'].tolist()
name_list = [name.strip() for name in name_list]
Run Code Online (Sandbox Code Playgroud)
并做出预测model.predict(name_list)
然而,我得到了ValueError: predict processes one line at a time (remove '\n')
我的列表中没有 '\n' 并且'\n' in name_list
返回False
我还发现了一个有类似问题的帖子,但仍然遇到同样的错误。
predictions=[]
for line in df['name']:
pred_label=model.predict(line, k=-1, threshold=0.5)[0][0]
predictions.append(pred_label)
df['prediction']=predictions
Run Code Online (Sandbox Code Playgroud) str
我有一个要映射的列表。这些词可以是“金属”或“圣帕特里克”。目标是根据此列表映射一个新字符串并找到前 N 个相似项。例如,如果我经过“St. Patrick”,我想捕获“st patrick”或“saint patrick”。
我知道有 gensim 和 fastText,而且我有一种直觉,我应该追求余弦相似度(或者如果有其他建议,我会洗耳恭听)。我主要处理时间序列,gensim 模型训练似乎不喜欢单词列表。
接下来我应该瞄准什么?