Các mối quan hệ trên ý nghĩa của từ

Từ vốn được hình thành để chỉ các khái nhiệm. VD: Từ "mèo" dùng để chỉ một loài vật có bốn chân, ăn chuột, nhìn rõ về đêm, .... hay từ "chim" dùng để chỉ loài vật có lông vũ, biết bay, .... Ngữ nghĩa không phụ thuộc vào ngôn ngữ. Người Anh, người Mỹ, người Trung Quốc hay người Việt Nam đều có chung khái niệm về con mèo, chỉ khác nhau về hình thức biểu đạt (vd trong tiếng Anh là "cat", trong tiếng Việt là "mèo"). Nhờ sự giống nhau trong khái niệm mà ta có thể dịch từ tiếng này sang tiếng khác. Một hình thái của từ (word form) hay gọi ngắn gọn là từ có thể có nhiều hơn một ý nghĩa biểu đạt đồng thời một nghĩa có thể được thể hiện bằng nhiều từ. Giữa các từ với nhau cũng có mối quan hệ về ngữ nghĩa, vd: "chó" là một loài "động vật", "rễ" là một bộ phận của "cây", .... Tổng hợp lại, ta có các dạng quan hệ sau: đồng nghĩa, trái nghĩa, đồng âm, đa nghĩa, hạ danh, thượng danh, bộ phận, bao hàm, kéo theo, cách thức.

Đồng Nghĩa (Synonymy): Các từ có hình thức biểu đạt khác nhau nhưng cùng chỉ một khái niệm. Ví dụ trong tiếng Việt, từ "lợn" và từ "heo" là các từ đồng nghĩa, trong tiếng Anh, từ "chance" và từ "opportunity" là các từ đồng nghĩa.

Trái Nghĩa (Antonym): Các từ chỉ các khái niệm trái ngược nhau. Từ "White" trái nghĩa với "Black", "Xấu" trái nghĩa với "Đẹp", "Sống" trái nghĩa với "Chết".

Đồng Âm (Homonym): Những từ có cùng cách viết (đọc) nhưng có nghĩa hoàn toàn khác nhau. Từ "bank" có nghĩa là ngân hàng nhưng cũng có nghĩa là bờ sông. Nói đúng hơn là ta có 2 từ "bank", một từ chỉ ngân hàng và một từ chỉ bờ sông và hai từ này có cách viết giống nhau. Tương tự trong tiếng Việt ta có "đông" có thể chỉ sự đông đúc, nhiều người hoặc chỉ hướng đông, hoặc chỉ mùa đông.

Đa Nghĩa (Polysemy): Các từ giống nhau về cách viết (đọc) và nghĩa có mối liên hệ với nhau. Ví dụ trong cây "I work in a company" thì "company" chỉ công ty còn trong câu "The company sends me an email" thì "company" ám chỉ ban điều hành công ty (trong câu này không thể là công ty và vật vô tri không thể gửi email). Ta thấy có sự gần gũi giữa nghĩa công ty và ban điều hành công ty.

Hạ Danh (Hyponymy): Từ X là hạ danh của từ Y nếu X là một tập con của Y. Ví dụ: tất cả các con mèo đều là động vật, hay "mèo" là tập con của tập "động vật" nên "mèo" là hạ danh của "động vật".

Thượng Danh (Hypernym): nếu X là hạ danh của Y thì Y chính là thượng danh của X. "động vật" là thượng danh của "mèo", "thực vật" là thượng danh của "cây xoài", ....

Bộ Phận (Meronymy): X là bộ phận của Y có nghĩa là Y bao gồm cả X. Ví dụ: "cây" gồm rễ, thân, lá thì "rễ", "thân", "lá" chính là bộ phận của "cây"; "bánh xe" là bộ phận của "chiếc xe".

Bao Hàm (Holonym) X là bộ phận của Y thì Y chính là bao hàm của X. "cây" bao hàm "rễ", "thân", "lá"; "chiếc xe" bao hàm "bánh xe".

Kéo Theo (Entailment): Hành động X xảy ra nghĩa là hành động Y xảy ra, hay để xảy ra X thì phải xảy ra Y. Ví dụ: "ngáy" là một kéo theo của "ngủ".

Cách Thức (Troponym): Hành động X là một cách thức xảy ra của Y. Ví dụ "nói nhỏ", "thì thầm" là một phương thức của "nói" hay "đi khập khiễng" là một phương thức của "đi".

Mạng ngữ nghĩa WordNet

Chúng ta nhận thấy rằng quan hệ về ngữ nghĩa chia làm hai loại chính là quan hệ thứ tự và quan hệ tương đương. Các từ đồng nghĩa, trái nghĩa, đồng âm, đa nghĩa là các từ có mối quan hệ tương đương hay quan hệ ngang hàng. Từ A đồng nghĩa với từ B thì ngược lài từ B cũng đồng nghĩa với từ A, tương tự cho trái nghĩa, đồng âm, .... Các quan hệ còn lại là các quan hệ thứ tự và phân thành các cặp như từ A là thượng danh của từ B thì từ B sẽ là hạ danh của từ A. Quan hệ thứ tự này còn có tính chất bắt cầu, nếu C là hạ danh của B, B là hạ danh của A thì C cũng là hạ danh của A. Ví dụ: sữa là một loại đồ uống, đồ uống là một loại chất lỏng thì sữa là một loại chất lỏng.

Nếu ta biểu diễn các ngữ nghĩa của từ thành một nút và các quan hệ giữa chúng là các cung thì ta sẽ có một mạng ngữ nghĩa với các từ có quan hệ tương đương thì sẽ nằm trong một lớp và các lớp này nối với nhau thành từng tầng dựa theo quan hệ thứ tự. Đó chính là mạng ngữ nghĩa WordNet.

Kiến trúc trong WordNet

Mạng ngữ nghĩa WordNet là một bộ dữ liệu ngữ nghĩa ở mức từ vựng, thể hiện quan hệ về nghĩa giữa các từ với nhau. WordNet bao gồm 3 bộ dữ liệu riêng biệt, một bộ của danh từ, một bộ của động từ, một bộ của tính từ và trạng từ. Tính đến phiên bản 3.0, bộ dữ liệu WordNet dành cho tiếng anh đã có khoảng 117000 danh từ, 11400 động từ, 22000 tính từ và 4600 trạng từ. Mạng WordNet được tổ chức theo mô hình cây như mô tả ở trên, mỗi node chứa một từ nguyên mẫu (lemma) cùng với tập các từ đồng nghĩa với nó (synset). Mạng WordNet chỉ thể hiện quan hệ về ngữ nghĩa chứ không thể hiện quan hệ về ngữ âm hay hình thái. Trong các ngôn ngữ biến cách như tiếng Anh, một từ có nhiều biến thể theo thì (tense), số lượng (plural) như "eats", "mice", "teeth", .... Xét về mặt ngữ nghĩa thì các từ này và các từ nguyên mẫu tương ứng của chúng nói đến cùng một khái niệm nên trong bộ dữ liệu WordNet thì các từ biến cách được gộp chung vào từ nguyên mẫu của chúng và cùng nằm trong một node.

Hiện tại WordNet không chỉ có bộ dữ liệu dành cho tiếng Anh mà còn có bộ dữ liệu dành cho các thứ tiếng khác như tiếng Pháp, tiếng Trung Quốc,... và có cả bộ dữ liệu WordNet của tiếng Việt.

Một số ứng dụng của bộ ngữ liệu WordNet

Đo khoảng cách về ngữ nghĩa của các từ

Ta có thể dùng WordNet như một độ đo khoảng cách về ngữ nghĩa của các từ. Khoảng cách giữa các từ sẽ được đo bằng độ dài đường đi ngắn nhất trong trong mạng WordNet. Ví dụ: Ta có "cat", "dog" là hạ danh trực tiếp của "animal". Như vậy khoảng cách giữa "cat" và "animal" là 1 còn khoảng cách từ "cat" đến "dog" là 2 (cat -> animal -> dog). Các từ đồng nghĩa trong WordNet sẽ có khoảng cách là 0.

Việc xây dựng độ đo như vậy có ý nghĩa quan trọng trong bài toán tìm từ thay thế trong văn bản. Ví dụ cho câu "I have a cat" và cần thay từ "cat" thành từ khác sao cho nghĩa ít biến đổi nhất. Theo độ đo của WordNet thì ta thấy việc thay "cat" thành "animal" sẽ phù hợp hơn "dog" vì độ đo giữa "cat" và "animal" ngắn hơn. Thực tế đã kiểm nghiệm điều đó, rõ ràng là câu "I have an animal" gần nghĩa với câu "I have a cat" hơn là câu "I have a dog".

Kiểm tra ràng buộc về nghĩa trong câu

Chúng ta đã biết phân tích cú pháp văn phạm cho ta cấu trúc cú pháp của câu. Tuy nhiên phân tích văn phạm chỉ có thể kiểm tra tính đúng về văn phạm chứ không kiểm tra tính đúng về ngữ nghĩa. Xét câu "the table eats the chicken", nếu đem câu này đi phân tích thì ta nhận thấy câu này hoàn toàn đúng về ngữ pháp ("the table" là NP đóng vai trò chủ ngữ, "eats" là V, "the chicken" là NP đóng vai trò bổ nghĩa cho V). Tuy nhiên rõ ràng là cái bàn (table) không thể "ăn" được con gà (chicken), thay vào đó nếu đổi thành "the dog eats the chicken" thì sẽ hợp lý hơn. Vậy làm sao biết được "table" hay "dog" có thể "eats the chicken"? - Bằng cách sử dụng quan hệ hạ danh-thượng danh trong WordNet. Giả sử ra có một heuristic là chỉ có "animal" mới có thể thực hiện động từ "eat" (tức là chỉ có động vật mới có thể ăn). Như vậy, để kiểm tra một vật có biết ăn hay không ta sẽ kiểm tra xem nó có phải "animal" hay không bằng cách duyệt các thượng danh của nó. Bằng cách duyệt ngược về các thượng danh, ta dễ dàng kiểm tra được là "dog" có thể thực hiện hành động "eat" còn "table" thì không thể. Tương tự, ta có thể thêm các ràng buộc về ngữ nghĩa để kiểm tra tính đúng đắn về ngữ nghĩa trong câu.

Truy cập WordNet với thư viện nltk trong Python

Thư viện nltk của Python cung cấp các phương thức để truy cập vào bộ dữ liệu WordNet tiếng Anh một cách đơn giản và hiệu quả. Để sử dụng bộ dữ liệu WordNet trong nltk, ta cần import thư viện như sau:

>>> from nltk.corpus import wordnet as wn

truy cập synset

WordNet cung cấp phương thức truy cập synset của một từ cho trước:

>>> wn.synsets('cat')
out: [Synset('cat.n.01'), Synset('guy.n.01'), Synset('cat.n.03'), Synset('kat.n.01'), Synset('cat-o'-nine-tails.n.01'), Synset('caterpillar.n.02'), Synset('big_cat.n.01'), Synset('computerized_tomography.n.01'), Synset('cat.v.01'), Synset('vomit.v.01')]

tìm kiếm thượng danh

Để kiểm tra thượng danh của một từ, ta có thể làm như sau:

>>> wn.synset('cat.n.01').hypernyms()
out: [Synset('feline.n.01')]

Kết quả này thể hiện thượng danh trực tiếp của "cat" là "feline". Ta cũng có thể duyệt cây thượng danh như sau:

>>> wn.synset('cat.n.01').hypernym_paths()
out: [[Synset('entity.n.01'), Synset('physical_entity.n.01'), Synset('object.n.01'), Synset('whole.n.02'), Synset('living_thing.n.01'), Synset('organism.n.01'), Synset('animal.n.01'), Synset('chordate.n.01'), Synset('vertebrate.n.01'), Synset('mammal.n.01'), Synset('placental.n.01'), Synset('carnivore.n.01'), Synset('feline.n.01'), Synset('cat.n.01')]]

Danh sách kết quả chính là các thượng danh của "cat" được xếp theo thứ tự với node bắt đầu là "entity" (thực thể). Node này chính là một trong những node gốc trong mạng wordnet, hầu hết mọi thứ đều bắt nguồn từ node này vì "thực thể" là từ ám chỉ chung cho các khái niệm vật chất. Ta cũng thấy trong chuỗi các thượng danh của "cat" có thể tìm thấy "animal" và như trong đã đề cập trong bài toán kiểm tra ràng buộc ngữ nghĩa thì ta có thể dùng cách này để xác định "cat" có thể thực hiện hành động "eat" hay không.

Một số quan hệ khác trong WordNet

Quan hệ bộ phận, bao hàm cũng được thể hiện trong WordNet:

>>> wn.synset('tree.n.01').part_meronyms()
out: [Synset('burl.n.02'), Synset('crown.n.07'), Synset('limb.n.02'), Synset('stump.n.01'), Synset('trunk.n.01')]
>>> wn.synset('animal.n.01').part_meronyms()
out: [Synset('face.n.07'), Synset('head.n.01')]
Độ đo bằng WordNet
>>> wn.synset('dog.n.01').path_similarity(wn.synset('cat.n.01'))
out: 0.2
>>> wn.synset('cat.n.01').path_similarity(wn.synset('feline.n.01'))
out: 0.5

Kết quả trên thể hiện "cat" và "feline" gần nghĩa hơn so với "cat" và "dog".

Bài viết tham khảo từ các nguồn:

http://www.nltk.org/howto/wordnet.html

Chương 2, cuốn sách Natural Language Processing with Python cuốn sách Speech and Language Processing An Introduction to Natural Language Processing Computational Linguistics and Speech Recognition