根据训练集中提供的意义相似性对单词进行聚类

时间:2016-10-10 07:23:52

标签: python python-3.x machine-learning cluster-analysis word

哪种机器学习算法可以作为以下问题的起点?

我有一个与下面类似的单词列表。

策展:某些教会(如英国圣公会教会)的神职人员,协助牧师负责教会或一组教会

码手:受雇从事户外工作的人(如割草坪)

和其他正常的单词。

我想要的是根据其含义决定新单词是否属于我们的类别(职称)。

例如:

  • 护士:1
  • 老师:1
  • 游泳:0
  • 游泳者:1
  • 促进者:1
  • 播放:0
  
      
  • 1 - 适合我们的类别
  •   
  • 2 - 不属于类别。
  •   

我使用python作为实现机器学习目的的工具。

1 个答案:

答案 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)。