从文本中提取位置 - 对字母(大写或小写)或已知词汇没有意义

数据挖掘 nlp lstm 命名实体识别
2022-03-08 12:14:00

我想从原始文本中提取位置或与位置相关的内容。我已经使用了 NLTK 和 spaCy 包;没有一个对我有用。例如,两者都会忽略“加拿大”作为位置,因为它是以小写格式编写的。或者,如果我只是在文本中包含某个新位置,那么两者都无法将其识别为位置。

这里的任何人都可以推荐一个解决方案(论文、博客、GitHub 或任何东西)来解决这个问题吗?更具体地说,我希望我的算法将“sakfhajl”和“alksjf”识别为以下示例中的位置:

“我目前在sakfhajl街”或“我想花更多时间在alksjf但......”

是的,我知道这很难,但我们人类不也是这样做的吗?鉴于上下文,我们都将某些名称识别为位置,尽管我们以前可能从未听说过这个名称。

2个回答

您可以首先检测“超出词汇表”的单词,并检查它们是否是位置数据集的一部分。

您可以使用一些位置数据集并将它们调整为不区分大小写。

以下是城市的:https ://simplemaps.com/data/world-cities

关于街道,您可以使用世界道路数据集并应用相同的逻辑: https ://sedac.ciesin.columbia.edu/data/set/groads-global-roads-open-access-v1

我刚刚发现自己是完美的解决方案。您需要做的就是编写一个嵌入层和一个双向 LSTM 矿井就是这样,

input_layer = tf.keras.Input(shape = (max_len,))
embeding_layer = tf.keras.layers.Embedding(top_wordings, embeding_length, input_length= max_len) (input_layer)
lstm_layer = tf.keras.layers.Bidirectional( tf.keras.layers.LSTM(15, return_sequences=True) ) (embeding_layer)
out_layer = tf.keras.layers.TimeDistributed( tf.keras.layers.Dense(2, activation= "softmax") ) (lstm_layer) 
model = tf.keras.Model(input_layer, out_layer)

model.compile (optimizer= "adam", loss = "sparse_categorical_crossentropy", metrics=["accuracy"])

然后开始自己创建带有所有位置介词的位置名称的随机句子,就是这样的句子

“我在/上方/下方/某个位置之间”

然后用您所有的位置数据集名称更改某个位置。

对于目标部分,您只需要两个标签,无论它是不是一个位置(0,1),然后让网络训练。然后它甚至会根据介词从你的词汇表中找到位置。

希望它也对您有所帮助/记住将所有训练数据集都设为小写以避免敏感性

另外,请使用 open-street-map 提取街道名称