我有一组(约 50k 元素)小文本片段(通常是一个或两个句子),每个片段都标记有从约 5k 单词列表中选择的一组关键字。
我将如何实现一个系统,通过从这个示例中学习,可以使用同一组关键字标记新句子?我不需要代码,我只是在寻找一些关于如何实现它的指针和方法/论文/可能的想法。
最佳答案
如果我很理解你的话,你需要的是一对文档的相似性度量。我最近一直在使用TF-IDF用于文档聚类,并且运行良好。我认为在这里你可以使用 TF-IDF 值并计算 cosine similarity获取每个文档相应的 TF-IDF 值。
- TF-IDF 计算
TF-IDF
代表Term Frequency - Inverse Document Frequency
。以下是计算方法的定义:
Compute TF-IDF values for all words in all documents
- TF-IDF score of a word W in document D is
TF-IDF(W, D) = TF(W, D) * IDF(W)
where TF(W, D) is frequency of word W in document D
IDF(W) = log(N/(2 + #W))
N - number of documents
#W - number of documents that contain word W
- words contained in the title will count twice (means more important)
- normalize TF-IDF values: sum of all TF-IDF(W, D)^2 in a document should be 1.
根据您使用的技术,这可以通过不同的方式实现。我已经使用嵌套字典在 Python 中实现了它。首先我使用文档名称D
作为键,然后为每个文档 D
我有一个嵌套字典,其中包含单词 W
作为键,每个单词W都有一个对应的数值,即计算出的TF-IDF
.
- 相似度计算
假设您已经计算了 TF-IDF
值已经存在并且您想要比较 2 个文档 W1
和W2
他们多么相似。为此,我们需要使用一些相似性度量。有很多选择,每一种都有优点和缺点。在这种情况下,IMO,Jaccard similarity和 cosine similarity会很好的。这两个函数都有 TF-IDF
以及 2 个文档的名称 W1
和W2
作为其参数,它将返回一个数值,该数值指示两个文档的相似程度。
计算两个文档之间的相似度后,您将获得一个数值。值越大,2个文档越相似W1
和W2
是。现在,根据您想要实现的目标,我们有 2 个场景。
- 如果您希望为 1 个文档仅分配最相似文档的标签,那么您可以将其与所有其他文档进行比较,并将最相似文档的标签分配给新文档。
- 您可以设置一些阈值,并且可以为与相关文档相似度大于阈值的文档分配所有标签。如果您设置
threshold = 0.7
,比所有文档 W 都将具有所有已标记文档的标签V
其中similarity(W, V) > 0.7
.
希望对您有所帮助。
祝你好运:)
关于machine-learning - 根据示例学习用关键字标记句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32442314/