【问题标题】:Clustering words on the basis of similarity in meaning which is provided in trainings set根据训练集中提供的含义相似性对单词进行聚类
【发布时间】:2017-02-18 13:43:11
【问题描述】:

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

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

curate:在某些教会(如圣公会)中协助牧师负责一个教会或一组教会的神职人员

园丁:受雇从事户外工作的人(如修剪草坪)

和其他正常的词。

我想要的是根据它们的含义来决定新词是否属于我们的类别(职位)。

例如:

  • 护士:1
  • 老师:1
  • 游泳:0
  • 游泳者:1
  • 主持人:1
  • 正在播放:0
  • 1-适合我们的类别
  • 2-不属于类别。

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

【问题讨论】:

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


    【解决方案1】:

    这是一个文本相似性问题,您希望将给定文本块的相似性与已知集合进行匹配。例如,“护士:从事医疗保健工作的人……”。如果相似度高于某个阈值,则有匹配,否则认为不匹配。

    首先,您需要对文本进行某种表示,以便进行比较。一些常见的文本表示是:

    使用 TF-IDF,每个职位描述的句子都被转换为一个计数向量,向量的长度等于所有职位描述中所有单词的词汇量。使用 Word2Vec,每个单词都被视为一个定义大小的向量,表示训练语料库中单词的上下文。您可以在数据上交易您自己的 Word2Vec 模型,也可以使用pretrained model。您需要自己组合每个句子的向量,以使职位描述具有可比性。一个简单的第一步是对所有词向量进行平均,但您也可以尝试 Doc2Vec(参见 here)。

    最后,您需要一个距离函数来比较两种表示。对于 TF-IDF,cosine similarity 是相当标准的。对于 Word2Vec,你可以使用euclidean distance 甚至是移动器的距离(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
    

    这假设您有一个函数 convert 将原始文本转换为前面提到的重定向之一,一个函数距离,即前面提到的用户距离函数,以及适合您的问题和距离函数的阈值。例如,余弦相似度使用 0 到 1 范围内的值,因此您需要为被视为匹配的值选择一个阈值(例如 0.85)。

    【讨论】:

    • 是的,单词包含的含义很容易形成数学问题。
    猜你喜欢
    • 2013-08-12
    • 2018-01-07
    • 2021-01-10
    • 2015-04-18
    • 2018-10-27
    • 2013-04-20
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多