哪种机器学习算法可以作为以下问题的起点?
我有一个与下面类似的单词列表。
策展:某些教会(如英国圣公会教会)的神职人员,协助牧师负责教会或一组教会
码手:受雇从事户外工作的人(如割草坪)
和其他正常的单词。
我想要的是根据其含义决定新单词是否属于我们的类别(职称)。
例如:
- 1 - 适合我们的类别
- 2 - 不属于类别。
我使用python作为实现机器学习目的的工具。
答案 0 :(得分:0)
这是文本相似性的问题,您希望将给定文本块的相似性与已知集相匹配。例如,"护士:一个从事医疗保健工作的人......"。如果相似度高于某个阈值,则存在匹配,否则认为不匹配。
首先,您需要对文本进行某种表示,以便您可以执行比较。一些常见的文本表示是:
使用TF-IDF,每个工作描述的句子被转换为计数向量,向量的长度等于所有工作描述中所有单词的词汇量的大小。使用Word2Vec,每个单词被视为定义大小的向量,表示训练语料库中单词的上下文。您可以在数据上交易自己的Word2Vec模型,也可以使用pretrained model。您需要自己组合每个句子的向量,以使作业描述具有可比性。一个简单的第一步是平均所有单词向量,但您也可以尝试Doc2Vec(参见here)。
最后,您需要一个距离函数来比较两个表示。对于TF-IDF,cosine similarity是一个相当标准的。对于Word2Vec,您可以使用euclidean distance甚至单词mover的距离(WMD再次见here)
将所有内容放在一起,您将需要执行以下操作:
trainingWords = {}
trainingWords['gardener'] = 'a person who tends a garden...'
trainingWords['valet'] = 'A person who parks a car...'
trainingVectors = {}
for (category in trainingWords):
trainingVectors[category] = convert(trainingWords[category])
newWord = 'nurse'
newDescription = 'A person working in healthcare...'
newVector = convert(newDescription)
threshold = <some number>
output = {}
for (category in trainingVectors):
if (distance(newVector, trainingVector[category]) < threshold):
output[category] = 1
else:
output[category] = 0
print output
这假设你有一个函数转换器,它将原始文本转换为前面提到的重定向之一,用户之前提到的距离函数的函数距离,以及适合于你的问题和距离函数的阈值。例如,余弦相似度使用0到1范围内的值,因此您需要为所谓的匹配选择一个阈值(例如0.85)。