自然语言处理中的向量表示、词性与形态学
1. 密集向量表示
在自然语言处理中,哈希技术在处理n - gram时具有诸多优势。我们可以跳过n - gram索引,只需对任意n - gram应用哈希函数。而且,由于它总是返回一个小于模数的整数,因此不存在未知值。不过,哈希也会造成编码冲突,因为编码容量从Unicode的100万个字符减少到了模数。例如,若有大约5000个不同字符,模数为100时,平均会有50个字符具有相同的哈希值,但这并不影响分类结果。
对于字符、二元组和三元组的模数,我们使用质数 MODS = [2053, 4099, 4099]
,因为它们通常具有更好的分布特性。Python的哈希函数在不同机器上执行时并不总是返回相同的值,我们用MD5标准和以下函数替代:
import hashlib
def reproducible_hash(string: str) -> int:
h = hashlib.md5(string.encode('utf-8'), usedforsecurity=False)
return int.from_bytes(h.digest()[0:8], 'big', signed=True)
有了这个函数,我们就能将n - gram转换为数字代码。下面的函数将其应用于字符串列表,模数作为参数:
def hash_str_list(text: list[str], char_mod: int) -> list[i