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

哈罗德

我正在做一个大学项目,我需要将一个字符串与其他字符串列表进行比较。我想知道我们是否有任何一种图书馆可以做到这一点。

假设我有一个表:DOCTORS_DETAILS

其他表格名称是:HOSPITAL_DEPARTMENTS,DOCTOR_APPOINTMENTS,PATIENT_DETAILS,PAYMENTS等。

现在,我要计算其中哪一个与DOCTOR_DETAILS相关性更高?预期的输出可以是,

DOCTOR_APPOINTMENTS - More relevant because of the term doctor matches in both string

PATIENT_DETAILS - The term DETAILS present in both string

HOSPITAL_DEPARTMENTS - least relevant

PAYMENTS - least relevant 

因此,我想根据两个有问题的字符串上存在的相似术语的数量找到RELEVENCE。

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

山姆·H

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

  1. 将每一段文字转换为矢量
  2. 测量向量之间的距离,并调用更接近的向量

执行步骤1的三种可能方法是:

要执行步骤2,几乎可以肯定要使用余弦距离。使用Python非常简单,这是博客文章中的实现

import numpy as np

def 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)

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

然后,您需要执行以下操作:

import fasttext

model = fasttext.load_model("model_filename.bin")


def order_tables_by_name_similarity(main_table, candidate_tables):
    '''Note: we use a fasttext model, not just pretrained vectors, so we get subword information
    you can modify this to also output the distances if you need them
    '''
    main_v = model[main_table]
    similarity_to_main = lambda w: cos_sim(main_v, model[w])
    return sorted(candidate_tables, key=similarity_to_main, reverse=True)

order_tables_by_name_similarity("DOCTORS_DETAILS", ["HOSPITAL_DEPARTMENTS", "DOCTOR_APPOINTMENTS", "PATIENT_DETAILS", "PAYMENTS"])

# outputs: ['PATIENT_DETAILS', 'DOCTOR_APPOINTMENTS', 'HOSPITAL_DEPARTMENTS', 'PAYMENTS']

如果您需要将此产品投入生产,那么巨大的模型大小(6.7GB)可能是个问题。此时,您将要构建自己的模型,并限制模型的大小。6MB模型可能会获得大致相同的精度!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Apache Spark文本相似性

您可以使用JDBC来仅连接实例而不指定数据库吗?

使用自动编码器实现成对的文本相似性

我可以使用Django从模型中的多数据库搜索吗?

您可以使用具有相同 Firestore 数据库的两个 iOS 应用程序吗?

您可以使用Laravel 5在数据库中创建条目而不填充Eloquent模型吗

您可以使用 AltBeacon/Android Beacon 库更新物理信标的额外数据字段吗?

按字符串相似性对条目进行排序时,使用数据库是否会提高性能?

可以使用 Python 作为数据库语言吗?

可以使用pgAdmin管理OpenShift数据库吗?

django可以使用外部数据库吗?

快速检查大型数据库的编辑距离相似性

Sharepoint:是否可以使用“文本更改时”这样的事件并填充其他字段从数据库中获取数据?

基于编辑距离的百分比javascript文本相似性算法

我可以使用join命令来合并在不同列上具有相似性的两个文件吗?

可以使用 Firebase 权限仅公开 Firebase 数据库中对象的某些字段以进行读取访问吗?

使用自定义命名实体可以改善spaCy的相似性结果吗?

您可以使用新的范围库进行压缩吗?

如何使数据库表字段动态

检查熊猫数据框中文本的相似性

根据数据库列与另一个数据库列的相似性更新数据库列

如何使用RowMatrix.columnSimilarities(相似性搜索)

我可以将 JSON 存储在 MySQL 数据库表字段中吗?就我而言,这是个好主意吗?如果是这样,如何?

显示与数据库中保存的文本相同的文本

Web应用程序可以使用C#从Firebase数据库检索数据吗?

Watson Visual Recognition 的与大量图像相关的相似性搜索 API

使用grepl查找数据内的相似性

CakePHP 3.x数据库迁移插件:是否可以更改表字段?

将json字段与数据库表字段映射