您能使用文本相似性搜索相关的数据库表/字段吗?

我在做一个大学项目,需要将一个字符串与其他字符串列表进行比较。我想知道是否有任何可以执行此操作的库。

假设我有一个名为:DOCTORS_DETAILS的表

其他表名包括:HOSPITAL_DEPARTMENTS,DOCTOR_APPOINTMENTS,PATIENT_DETAILS,PAYMENTS等。

现在我想计算这些表中哪些与DOCTOR_DETAILS更相关?预期输出可以是,

DOCTOR_APPOINTMENTS - 更相关,因为术语doctor在两个字符串中匹配PATIENT_DETAILS - 术语DETAILS在两个字符串中出现HOSPITAL_DEPARTMENTS - 最不相关PAYMENTS - 最不相关 

因此,我想根据两个字符串中存在的相似术语的数量来确定相关性。

例如:DOCTOR_DETAILS -> DOCTOR_APPOITMENT(1/2) > DOCTOR_ADDRESS_INFORMATION(1/3) > DOCTOR_SPECILIZATION_DEGREE_INFORMATION (1/4) > PATIENT_INFO (0/2)


回答:

语义相似性是一个常见的NLP问题。有多种方法可以研究,但它们的核心都将归结为:

  1. 将每段文本转换为向量
  2. 测量向量之间的距离,并称距离较近的向量更相似

执行第一步的三种可能方法是:

要执行第二步,您几乎肯定希望使用余弦距离。在Python中这非常简单,这里是从博客文章中摘取的一个实现:

import numpy as npdef cos_sim(a, b):    """Takes 2 vectors a, b and returns the cosine similarity according     to the definition of the dot product    """    dot_product = np.dot(a, b)    norm_a = np.linalg.norm(a)    norm_b = np.linalg.norm(b)    return dot_product / (norm_a * norm_b)

对于您的特定用例,我的直觉是使用fasttext。因此,官方网站展示了如何下载一些预训练的词向量,但您需要下载一个预训练的模型(参见此GH问题,使用https://dl.fbaipublicfiles.com/fasttext/vectors-english/wiki-news-300d-1M-subword.bin.zip),

然后您可能需要做类似这样的事情:

如果您需要将此应用于生产环境,巨大的模型大小(6.7GB)可能会成为问题。届时,您需要构建自己的模型,并限制模型大小。您可能会从一个6MB的模型中获得大致相同的准确性!

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注