Đối với một tài liệu, keyphrase có thể chỉ là một thuật ngữ thông thường liên quan đến nội dung tài liệu nhưng cũng có trường hợp keyphrase là tên của một vấn đề lớn mà tài liệu đang phân tích, bàn luận.
Ví dụ hai tài liệu A: An Algorithm for Finding Best Matches in Logarithmic Expected Time và tài liệu B: ALGORITHM DESIGN: FOUNDATION, ANALYSIS AND INTERNET EXAMPLES đều có nội dung liên quan đến keyphrase Algorithm. Tuy nhiên ngay trong tiêu đề ta đã có thể hình dung được vai trò khác nhau của keyphrase algorithm trong hai tài liệu trên. Tài liệu A đề cập đến một thuật toán cụ thể và không phân tích sâu vào lĩnh vực thuật toán. Ngược lại tài liệu B có nội dung xoay quanh thuật toán và việc thiết kế thuật toán, với nền tảng, phân tích và cả ví dụ.
Để làm rõ sự khác biệt này, bên cạnh việc đánh trọng số cho keyphrae, luận văn đề xuất thêm sử dụng một hàm gán nhãn cho các kyephrase. Hiện tại ta chỉ xét tập nhãn phân loại gồm 2 nhãn: Labes = {“Thuật ngữ chuyên môn”, “chủ đề”}
Nhãn của keyphrase k trong tài liệu d ký hiệu label(k, d) sẽ được xác định bằng phương pháp bán thủ công, hệ thống rút trích keyprhase sẽ áp dụng heuristic để đoán nhãn cho keyphrase, sau đó chuyên gia sẽ kiểm tra kết quả của quá trình gán nhãn này để đảm bảo tính chính xác. Có hai nguyên tắc được đặt ra trong quá trình gán nhãn:
• Keyphrase được gán nhãn chủ đề khi và chỉ khi keyphrase đó trùng tên với một lớp trong ontlogy.
• Khi một keyphrase k được gán nhãn chủ đề, đồ thị keyphrase của tài liệu sẽ không chứa các keyphrase cùng lớp với k. Các keyphrase này xem như được đại diện bởi k
dưới:
Thuật toán xác định nhãn cho keyphrase k trong tài liệu d
Input: đồ thị keyphrase K biểu diễn cho tài liệu d, keyphrase k cần được gán nhãn Output: Nhãn được xác định cho keyphrase k
1. Tìm lớp c trong tập các lớp C sao cho k trùng tên với c
2. If c return “Thuật ngữ chuyên môn”∈ ∅
3. count:=0
4. Foreach a in K:
4.1. If a K:∈
4.1.1. count := count + 1
5. If count >= K.vertex_count() or count >= 10:
5.1. return “Chủ đề”
6. return “Thuật ngữ chuyên môn”
Sau khi chuyên gia đã xác nhận nhãn cho keyphrase k, công việc tiếp theo sẽ là xóa bỏ các keyphrase cùng lớp với k (nếu có) ra khỏi đồ thị. Điều này có thể giúp thu nhỏ kích thước của đồ thị keyphrase và cải thiện tốc độ xử lý của quá trình tìm kiếm
3.1.3. Trọng số trong đồ thị keyphrase biểu diễn câu truy vấn
Một trong những dạng truy vấn thông thường khi truy tìm tài liệu theo ngữ nghĩa là người dùng cung cấp một danh sách các keyphrase có liên quan đến yêu cầu tìm kiếm của mình. Ta có thể xây dựng đồ thị keyphrase biểu diễn câu truy vấn bằng một cách tương tự như đối với tài liệu. Tuy nhiên do câu truy vấn chỉ là một danh sách các keyphrase không có cấu trúc và các thông tin về ngữ cảnh như trong một tài liệu, các phương pháp đánh trọng số cho đồ thị biểu diễn tài liệu không thể được áp dụng không thể áp dụng.
trọng số cho đồ thị biểu diễn câu truy vấn nhằm làm giàu khả năng biểu diễn ngữ nghĩa để thể hiện sát hơn yêu cầu tìm kiếm của người dùng. Một nhận xét có thể thấy được là trong query sẽ có những keyphrase có tầm quan trọng cao hơn so với các keyphrase khác trong việc làm rõ yêu cầu tìm kiếm của người dù. Đó có thể là những keyphrase có nghĩa cụ thể, chuyên biệt có thể giúp ta xác định chính xác hơn yêu cầu tìm kiếm so với những keyphrase mang nghĩa quá phổ quát. Hoặc đó có thể là keyphrase chính yếu trong một keyphrase tổ hợp, thể hiện rõ nhất nội dung của keyphrase tổ hợp đó. Dựa trên CK_ONTO, ta sẽ tìm ra những keyphrase quan trọng này và từ đó có phương pháp đánh trọng số cho những keyphrase trong đồ thị biểu diễn câu truy vấn
3.1.3.1. Keyphrase có nghĩa chuyên biệt hơn keyphrase khác:
Để xác định tính chuyên biệt giữa hai keyphrase ta dựa vào các quan hệ phân cấp trong ontology CK_ONTO, mà cụ thể ở đây là quan hệ Part-Of và Kind- Of. Nếu keyphrase a có quan hệ Part-Of hoặc Kind-Of với keyphrase b thì ta xem
a có nghĩa chuyên biệt hơn b. Quan hệ giữa a và b có thể là quan hệ trực tiếp được lưu trong Ontology hoặc quan hệ được suy ra từ tính chất bắt cầu: Nếu a Part-of c
và c Part-of b thì a Part-Of b.
Khi suy diễn quan hệ phân cấp dựa trên tính chất bắt cầu, ta có thể lượng giá “mức độ chuyên biệt” của keyphrase a so với b dựa vào số lân phải bắt cầu. Số lần bắt cầu càng lớn thì độ chuyên biệt càng sâu. Nếu hai keyphrase không có quan hệ Part-Of với nhau nhưng Thuật toán để xác định keyphrase chuyên biệt hơn giữa hai keyphrase có thể được cho như sau:
Algorithm: Xác định keyphrase chuyên biệt INPUT: hai keyphrase a, b
OUTPUT: keyphrase có độ chuyên biệt cao hơn trong số a và b. Nếu hai keyphrase không có liên hệ chuyên biệt với nhau hoặc không có keyphrase nào có
độ chuyên biệt cao hơn thì trả về 0.
1: distance_a = 0, distance_b = 0, threshold = 5
2: //Thêm vào t p hyper_a keyphrase a v i kho ng cách cho trậ ớ ả ước //Tương t v i t p hyper_bự ớ ậ
hyper_a.add(a, distance_a), hyper_b.add(b, distance_b) 3: while (distance_a < threshold and distance_b < threshold): 3.1: foreach (keya, dista) in hyper_a: 3.1.1: foreach (keyb, distb) in hyper_b: 3.1.1.1: if keya == keyb: 3.1.1.1.1: if dista > distb return b 3.1.1.1.2: elseif dista < distb return a 3.1.1.1.3: else return 0 3.1.1.2: //M r ng t p hyper_bở ộ ậ foreach keyphrase c where keyb is PartOf c hyper_b.add(c, distance_b+1) 3.1.2: //M r ng t p hyper_aở ộ ậ foreach keyphrase c where keya is PartOf c hyper_a.add(c, distance_a + 1) 3.1.3: distance_b = distance_b + 1 3.2 distance_a = distance_a + 1 4: return 0
3.1.3.2. Xác định keyphrase chính trong keyphase tổ hợp
Đối với các keyphrase tổ hợp dạng chính – phụ, keyphrase đơn đóng vai trò là keyphrase chính của tổ hợp sẽ quan trọng hơn những keyphrase còn lại trong việc xác định ý nghĩa của toàn bộ keyphrase tổ hợp. Việc xác định keyphrase chính của tổ hợp chỉ có thể được thực hiện một cách chính xác nhất thông qua kinh nghiệm chuyên gia. Tuy nhên trong trường hợp thiếu thông tin từ chuyên gia chúng ta có thể đoán một cách tương đối keyphrase nào mang nghĩa chính yếu của cả tổ hợp dựa trên 2 nguyên tắc:
1. Những keyphrase quá phổ biến, xuất hiện trong gần như tất cả các tài liệu sẽ có nghĩa rất chung chung, phổ quát, không thể là keyphrase
chính. Ta có thể phát hiện ra các keyphrase này bằng các xét trọng số idf. Keyphrase có trọng số idf quá thấm, thấp hơn một ngưỡng nào đó sẽ được xác định không phải keyphrase chính. Ví dụ keyphrase
computer sẽ không phải là keyphrase chính trong các keyphrase tổ hợp sau: “computer networking”, “computer security”, v.v..
2. Về mặt ngữ pháp, trong tiếng Anh keyphrase đứng trước thường có vai trò bổ nghĩa, làm rõ nghĩa cho keyphrase đứng sau. Vì thế keyphrase keyphrase chính thường sẽ là keyphrasse đứng trước trong keyphrase tổ hợp VD: machine learning algorithm, programming
technique.
3.1.3.3. Sơ đồ liên hệ về độ quan trọng giữa keyphase
Với tất cả các cặp keyphrase a, b trong câu truy vấn. Nếu keyphrase a quan trọng hơn b, ta xem có một liên hệ từ keyphrase b đến keyphrase a.
Ví dụ xét query: “data structure and algorithm in comptuer graphics”. Query này được biểu diễn thành đồ thị keyphrase như sau:
Ta có thể thấy hai keyphrase Algorithm và Data structure có liên quan chặt chẽ với nhau. Nhưng cả hai keyphrase này đều không có quan hệ trực tiếp với keyphrase Computer graphics. Tuy nhiên khi xét về độ quan trọng trong việc làm rõ nghĩa câu truy vấn ta có thể thấy keyphrase Computer graphics có tầm quan trọng hơn hai keyphrase kia, giúp xác định phạm vi người dùng mong muốn tìm kiếm là lĩnh vực Đồ họa máy tính. Như vậy, liên hệ quan trọng/kém quan trọng hơn trong số các keyphrase trên sẽ được cho trong bảng sau:
Data structure Related Algorithm Computer graphics
Keyphrase Quan trọng hơn Kyephrase
Data structure Algorithm
Data structure Computer graphics
Algorithm Data structure
Algorithm Computer graphics
Computer graphics X Data structure Computer graphics X Algorithm
3.1.3.4. Đánh trọng số cho keyphrase trong đồ thị biểu diễn câu truy vấn
Trọng số cho các keyphrase sẽ được đánh theo các nguyên tắc:
1. Tổng trọng số của tất cả keyphrase trong query sẽ bằng 1
2. Keyphrase có độ quan trọng cao sẽ có trọng số lớn.
Để tính trọng số cho các keyphrase, trước hết, ta chia tập K các keyphrase trong truy vấn thành hai tập con K1 và K2. Trong đó K1 là những kyephrase có liên hệ về độ quan trọng với keyphrase khác. Và K2 là những keyphrase độc lập, không có liên hệ với keyphrase khác về độ quan trọng. Ban đầu ta gán trọng số cho tất cả keyphase là bằng nhau và bằng 1/N (N là số keyphrase trong K. Riêng đối với trọng số của các kephrase trong K1 sẽ tiếp tục được đánh giá lại theo nguyên tắc (2), các keyphrase kém quan trọng sẽ nhường một phần trọng số của mình cho các keyphrase quan trọng hơn nó. Giá trị trọng số của các keyphrase trong K1 sẽ được tạm thời thay đổi theo công thức:
Wt(a)=1−d
K1 +d⋅∑
b∈Ka
Wt(b)
L(b)
keyphrase kém quan trọng hơn a, L(b) là số lượng các keyphrase quan trọng hơn b và d là một tham số xác định tỉ lệ phần trọng số mà các keyphrase kém quan trọng sẽ nhường cho keyphrase quan trọng hơn.
Trọng số tạm thời Wt sau đó sẽ được cân bằng để đảm bảo nguyên tắc (1):
W(a)= Wt(a) ∑ x∈K1 Wt(x)⋅ |K1| |K2|
Để tính trọng số tạm thời Wt (a) ta có thể thực hiện bằng vòng lặp. Do theo công thức trọng số của một keyphase phụ thuộc vào trọng số của các keyphase và không có gì đảm bảo liên hệ “quan trọng hơn” này không tạo thành một vòng khép kín nên việc lặp sẽ không có điều kiện dừng xác định. Việc lặp sẽ dừng sau một số lần giới hạn hoặc khi giá trị trọng số thay đổi không đáng kể sau mỗi lần lặp.
Như vậy, trọng số cho keyphrase tại lần lặp thứ i ký hiệu Wt(A, i) sẽ được cho bởi công thức:
Wt(a,0)= 1 |K| Wt(a , i)=1−d+d⋅∑ b∈Ka Wt(b , i−1) L(b)
Thuật toán tính trọng số cho các keyphrase có thể được cho bên dưới:
Algorithm: Thuật toán tính trọng số cho các keyphrase trong query
INPUT: Tập các keyphrase K trong đồ thị keyphrase biểu diễn câu truy vấn. Các keyphrase đã được xác định độ quan trọng
OUTPUT: Trọng số cho từng keyphrase được lưu trong mảng W
1: ε = 0.01, max_iteration = 100, d = 0.5 //Các tham số
2: foreaach k in K:
2.1: W[k] = Wt[0][k] = 1 / |K|
3: for i from 0 to max_iteration:
3.1: foreach k in K1
3.1.2: foreach k1 in K1 where k1 < k :
3.1.2.1: l = count(k2 in K1 where k1 < k2)
3.1.2.2: w = w + d*W[k1,0]/l
3.1.3: Wt[1][k] = w / |K|
3.1.4: quit = true
//Kiểm tra nếu trọng số mới tính của tất cả
keyphrase //nếu thay đổi không quá ε so với lần lặp trước
đó //thì việc tính toán được kết thúc
3.1.5: foreach k in K where exist k' that k' != k:
3.1.5.1: if ( | Wt[0][k] – Wt[1][k] | > ε ):
3.1.5.1.1: quit = false
3.1.5.2: Wt[0][k] = W[1][k]
3.1.6: if (quit == true) break for 4: foreaach k in K1:
4.1: W[k] = Wt[0][k]/sum(Wt[0])* |K1|/|K|