当前位置:   article > 正文

如何使用spacy工具包,实现依据依存关系结果,对英文句子构建矩阵图_spacy依存关系输出结果是什么形式

spacy依存关系输出结果是什么形式

 

目录

 

问题描述:

问题实现:


问题描述:

使用GCN构建网络的时候,会传入last_hidden_state 和adjacency_matirx。 所谓adjacency_matirx一般是指使用工具包,获取依存关系解析结果。依据解析结果构建0-1矩阵,若两者之间存在关系,则对应元素为1, 不存在依存关系则为0 ,特别的,主对角线全部为1,且是无向图。具体代码实现,参考另外一篇博客:Click Here

现在,想要构建全新的依存关系矩阵,与前面不同的是,不再构建单一的0-1矩阵,而是依据不同的实际关系类型,赋予(w_i,w_j)相对应位置不同的数字。

问题实现:

补充说明:

  1. import numpy as np
  2. import spacy
  3. import pickle
  4. from transformers import BertTokenizerFast, BertTokenizer, AutoTokenizer
  5. from spacy.tokens import Doc
  6. from pdb import set_trace as stop
  7. # Function: 构建英文数据集的邻接矩阵,比较句依据依存关系构图,非比较句则直接构建tokenize长度的主对角线为1的矩阵
  8. # 先获取spacy进行英文解析,所有的依存解析类型,存放在字典parser_dict中,特别的若没关系,则是0, self是1,表示主对角线。
  9. parser_dict = {'empty': 0, 'self':1}
  10. nlp = spacy.load('en_core_web_sm')
  11. parser_tuple = nlp.get_pipe("parser").labels
  12. count = 2
  13. for parser in parser_tuple:
  14. # print(i)
  15. parser_dict[parser] = count
  16. count += 1
  17. parser_dict
  18. class WhitespaceTokenizer(object):
  19. def __init__(self, vocab):
  20. self.vocab = vocab
  21. def __call__(self, text):
  22. words = text.split()
  23. # All tokens 'own' a subsequent space character in this tokenizer
  24. spaces = [True] * len(words)
  25. return Doc(self.vocab, words=words, spaces=spaces)
  26. nlp = spacy.load('en_core_web_sm') # zh_core_web_sm or en_core_web_sm
  27. nlp.tokenizer = WhitespaceTokenizer(nlp.vocab)
  28. tokenizer = BertTokenizerFast.from_pretrained("/home/qtxu/PLM/bert-base-uncased") # /home/qtxu/PLM/bert-base-chinese or bert-base-uncased
  29. # 构建矩阵
  30. def dependency_adj_matrix(text):
  31. tokens = nlp(text)
  32. tokenized = tokenizer(text.split(" "), is_split_into_words=True, add_special_tokens=False)
  33. word_ids = tokenized.word_ids()
  34. words = text.split()
  35. matrix1 = np.zeros((len(word_ids), len(word_ids))).astype('float32')
  36. assert len(words) == len(list(tokens))
  37. assert (len(tokens) - 1) == max(word_ids)
  38. for i, idx in enumerate(word_ids):
  39. matrix1[i][i] = 1
  40. for j, id in enumerate(word_ids):
  41. if i == j:
  42. continue
  43. if tokens[id].is_ancestor(tokens[idx]):
  44. for token in tokens[id].subtree:
  45. if token == tokens[idx]:
  46. relation_type = token.dep_
  47. matrix1[i][j] = parser_dict[relation_type]
  48. print(f" **{words[i]} ({tokens[idx]}) --{relation_type}--> {words[j]} ({tokens[id]})")
  49. break
  50. elif tokens[idx].is_ancestor(tokens[id]):
  51. for token in tokens[idx].subtree:
  52. if token == tokens[id]:
  53. relation_type = token.dep_
  54. matrix1[i][j] = parser_dict[relation_type]
  55. print(f" ##{words[j]} ({tokens[id]}) --{relation_type}--> {words[i]} ({tokens[idx]})")
  56. break
  57. else:
  58. matrix1[i][j] = 0
  59. return matrix1
  60. # 验证示例
  61. text = "this is a text sentence ."
  62. dependency_adj_matrix(text)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/460516
推荐阅读
相关标签
  

闽ICP备14008679号