我有一组(约50k个元素)的小文本片段(通常是一个或两个句子),每个片段都标记了一组从约5k个单词列表中选择的关键字。
我该如何实现一个系统,从这个例子中学习,然后用相同的关键字集标记新句子?我不需要代码,我只是在寻找一些关于如何实现这个的指针和方法/论文/可能的想法。
如果我没理解错的话,您需要的是一对文档的相似性度量。我最近一直在使用TF-IDF对文档进行聚类,效果非常好。我认为这里可以使用TF-IDF值并计算每个文档对应的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
。
- 相似性计算
- 如果您希望一个文档只分配最相似文档的标签,那么您将其与所有其他文档进行比较,并将最相似的标签分配给新文档。
- 您可以设置一些阈值,并且您可以将与所讨论的文档具有相似度的所有文档标记分配给大于阈值的文档。如果您设置了
threshold = 0.7
,那么所有文档W将具有所有已经标记的文档V
的标签,而similarity(W, V) > 0.7
.
假设你已经计算了TF-IDF
的值,你想比较两个文档W1
和W2
的相似程度。为此,我们需要使用一些相似度度量。有很多选择,每一个都有优点和缺点。在这种情况下,在我看来,Jaccard相似性和余弦相似性是很好的选择。这两个函数都有TF-IDF
和两个文档的名称W1
和W2
作为参数,它将返回一个数字值,表示这两个文档的相似程度。
计算两个文档之间的相似度后,您将获得一个数值。值越大,说明W1
和W2
两个文档越相似。现在,根据您想要实现的目标,我们有两种场景。
我希望这对你有帮助。
祝你好运:)
给定你的描述,你正在寻找某种形式的监督学习。该类中有许多方法,例如朴素贝叶斯分类器、支持向量机(SVM)、k近邻(kNN)等。
对于文本的数字表示,您可以选择词袋或频率列表(本质上,每个文本由所有单词跨越的高维向量空间上的向量表示)。
顺便说一句,用一个关键字标记文本(一个分类任务)比给它们分配多达五个关键字(可能的类的数量组合爆炸)要容易得多