如何从文本创建向量以使用二进制分类进行地址匹配?

数据挖掘 分类 文本挖掘 相似 特征工程
2021-09-23 15:13:38

我想比较两个地址的相似性(纯粹是文本出现的相似性而不是语义相似性)。我有一个带有“Address1”、“Address2”和“Similar”的标记数据集,其中“Similar”的值为 0(不相似)或 1(相似)。

现在,如何将“Address1”和“Address2”中的文本转换为数字向量,从而将其视为二进制分类问题?

3个回答

我宁愿建议将每个地址视为一个单独的实例。(特征矩阵中的单独行)

每个地址都可以进一步细分为以下属性:房屋编号、街道、城市、州、国家。

以上属性可以根据它们之间的距离进行矢量化。就像从西到东对每个国家进行矢量化(增量数值)。然后从西到东对国家的每个州进行矢量化。同样适用于街道。如果两个实体落在同一经度上,则分配连续的数值。

一旦每个属性都被向量化,两个地址之间的相似性可以是两个地址向量之间的欧几里德距离。

无论如何,撇开数据科学方法不谈,这个问题可以通过使用 Google Maps API 获取两个地址之间的距离来进一步解决。

这属于“距离度量学习”或“相似性学习”的范畴;具体来说,这就是维基百科所说的“分类相似性学习问题”。

在您的具体情况下,我建议您使用逻辑回归将地址对分类为“相似”或“不相似”。特别是,将一对地址 (Address1,Address2) 映射到d维特征向量 XRd. 然后,训练一个逻辑回归模型,从特征向量中预测“相似”与“不相似”X. 这会将您的问题变成布尔分类任务,并通过应用逻辑回归来解决它。

你如何形成一个特征向量?在那里,您将使用您的领域知识来识别特征,其中每个特征代表一个可能有助于确定两个地址是否匹配的因素。您可以将地址解析为元素(门牌号、街道名称、城市、州、邮政编码),并且每个地址元素都有一个特征(一维):

  • 根据两个地址中的门牌号是否匹配,一个特征是 0 或 1。

  • 另一个特征是第一个地址中的街道名称和第二个地址中的街道名称之间的 Levenshtein 编辑距离(在对两者进行规范化之后,例如,通过将它们小写)。

  • 另一个功能是两个地址中两个城市之间的 Levenshtein 编辑距离。

  • 根据状态是否匹配,另一个有 0 或 1。

  • 另一个根据邮政编码的前五位是否匹配为0或1。

  • 根据两者是否具有相同的 ZIP+4,另一个有 0 或 1。

然后,使用您的标记训练集使用逻辑回归训练分类器,以从这些特征中预测“相似”与“不相似”。

这种方法的一个好处是,如果您发现分类器出错,很容易添加其他功能。例如,很容易将两个地址之间的编辑距离添加为另一个特征,或者用编辑距离的阈值版本替换编辑距离,或者将每个地址输入地理定位服务以返回(纬度,经度)和然后计算这两个位置之间的距离,或您选择的任何其他方案。

而且,当然,您可以用任何其他布尔分类方法(例如随机森林)替换逻辑回归。然而,逻辑回归可能是这个问题的一个很好的简单起点。

主要是补充上一个答案,首先,您所说的文本出现的相似性是什么意思,您是指它们经常出现的其他词还是您想识别一段文本与地址的相似程度。如果您只是在寻找比较地址的指标,那么最好的办法是使用上一个答案中提到的 Geo Location API。如果只是将它们转换为向量,您可以获取整个词汇表并为每个标记分配一个索引,如果将来您需要语义相似性,您可以将 word2vec 应用于索引。