Google có ý nghĩa như thế nào? Thuật toán làm việc?


436

Tôi đã phát triển một trang web nội bộ cho một công cụ quản lý danh mục đầu tư. Có rất nhiều dữ liệu văn bản, tên công ty, v.v. Tôi đã thực sự ấn tượng với một số công cụ tìm kiếm có khả năng trả lời rất nhanh các truy vấn với "Ý bạn là: xxxx".

Tôi cần có thể lấy một truy vấn người dùng một cách thông minh và trả lời không chỉ với kết quả tìm kiếm thô mà còn với "Ý của bạn là gì?" phản ứng khi có một câu trả lời thay thế rất có khả năng vv

[Tôi đang phát triển trong ASP.NET (VB - đừng chống lại tôi!)]

CẬP NHẬT: OK, làm thế nào tôi có thể bắt chước điều này mà không có hàng triệu 'người dùng không trả tiền'?

  • Tạo lỗi chính tả cho mỗi thuật ngữ 'đã biết' hoặc 'chính xác' và thực hiện tra cứu?
  • Một số phương pháp thanh lịch khác?

1
Đây là phiên bản VB.NET của Bộ sửa lỗi chính tả Norvig. Bạn có thể thấy điều này hữu ích nếu nó không quá muộn!
Ralph Wiggum


Tôi gõ trên bàn phím không qwerty (Colemak) và tính năng không thông minh bằng một nửa. Nó chắc chắn học được từ các cặp sửa lỗi được ghi lại và do đó được điều chỉnh thành qwerty. Trình kiểm tra chính tả thông thường hoạt động tốt cho bàn phím của tôi, vì khoảng cách chỉnh sửa chuỗi Chuỗi dự kiến ​​là bất biến bố cục.
Đại tá Panic

Câu trả lời:


366

Đây là lời giải thích trực tiếp từ nguồn (gần như)

Tìm kiếm 101!

lúc tối 22:03

Đáng để xem!

Về cơ bản và theo Douglas Merrill, cựu CTO của Google, nó giống như thế này:

1) Bạn viết một từ (sai chính tả) trong google

2) Bạn không tìm thấy những gì bạn muốn (không nhấp vào bất kỳ kết quả nào)

3) Bạn nhận ra mình đã viết sai chính tả nên bạn viết lại từ đó trong hộp tìm kiếm.

4) Bạn tìm thấy những gì bạn muốn (bạn nhấp vào liên kết đầu tiên)

Mẫu này được nhân lên hàng triệu lần, cho thấy những lỗi chính tả phổ biến nhất và những sửa lỗi "phổ biến nhất" là gì.

Bằng cách này, Google có thể gần như ngay lập tức, cung cấp sửa lỗi chính tả trong mọi ngôn ngữ.

Ngoài ra, điều này có nghĩa là nếu qua đêm mọi người bắt đầu đánh vần đêm là "nigth" google sẽ đề xuất từ ​​đó thay thế.

BIÊN TẬP

@ThomasRutter: Douglas mô tả nó là "máy học thống kê".

Họ biết ai sửa truy vấn, vì họ biết truy vấn nào đến từ người dùng nào (sử dụng cookie)

Nếu người dùng thực hiện một truy vấn và chỉ 10% người dùng nhấp vào kết quả và 90% quay lại và nhập một truy vấn khác (với từ đã sửa) và lần này 90% nhấp vào kết quả, thì họ biết rằng họ đã tìm thấy một điểm chính xác.

Họ cũng có thể biết nếu đó là những truy vấn "có liên quan" của hai loại khác nhau, bởi vì chúng có thông tin của tất cả các liên kết mà chúng hiển thị.

Hơn nữa, giờ đây họ đang đưa ngữ cảnh vào kiểm tra chính tả, vì vậy họ thậm chí có thể đề xuất các từ khác nhau tùy thuộc vào ngữ cảnh.

Xem bản demo này của google wave (@ 44m 06s) để biết cách ngữ cảnh được đưa vào tài khoản để tự động sửa lỗi chính tả.

Ở đây nó được giải thích làm thế nào mà xử lý ngôn ngữ tự nhiên hoạt động.

Và cuối cùng ở đây là một bản demo tuyệt vời về những gì có thể được thực hiện bằng cách thêm dịch máy tự động (@ 1h 12m 47s) vào hỗn hợp.

Tôi đã thêm các neo của phút và giây vào video để bỏ qua trực tiếp nội dung, nếu chúng không hoạt động, hãy thử tải lại trang hoặc cuộn bằng tay để đánh dấu.


Làm thế nào để các thuật toán làm việc mặc dù? Google đi từ "Chúng tôi nhận được hàng tỷ tìm kiếm với các cụm từ khác nhau và đây là những tìm kiếm" đến "thuật ngữ này do đó phải là một lỗi chính tả phổ biến của thuật ngữ này"? Họ đã giải quyết vấn đề này, nhưng tôi quan tâm đến việc làm thế nào. Làm thế nào để họ nhận ra rằng hai tìm kiếm là từ cùng một người dùng và từ nào là 'sự điều chỉnh' của người khác và làm thế nào để họ tổng hợp từ này qua hàng tỷ tìm kiếm?
thomasrutter

51
Nếu mọi người bắt đầu viết sai chính tả "đêm" ... Tôi tin rằng họ đã gặp phải vấn đề này với những người tìm kiếm "Flickr".
Max Lybbert

42
vấn đề với tất cả mọi người sai chính tả một cái gì đó đã xảy ra theo nghĩa nghiêm trọng hơn nhiều: Hãy thử gõ 'fuscia' vào Google. Google nói "Ý của bạn là fuschia?" Chính tả, trên thực tế, là "fuchsia", nhưng không ai có thể đánh vần chính xác vì một số lý do. Vấn đề thậm chí còn tồi tệ hơn trên Dictionary.com; nếu bạn gõ "fuschia" vào tìm kiếm của họ, nó sẽ cho bạn "Không có kết quả nào cho fuschia. Ý bạn là 'fuschia'?" (nghĩa là, ý bạn là gì bạn vừa gõ?)
Daisy Sophia Hollman

8
Tôi không tin rằng họ chỉ sử dụng dữ liệu sai chính tả - chắc chắn có một khoảng cách Levenshtein hoặc tương tự đang diễn ra - tìm kiếm 'Plack' (và một hoặc nhiều từ khác) và nó luôn được sửa thành 'đen', đó là một lỗi sai rất khó xảy ra / typo
plusplus

4
@Jakub Tôi nghĩ rằng họ đã khắc phục vấn đề kể từ khi tôi đưa ra nhận xét đó hơn 4 năm trước. Thật vậy, Google cũng đã khắc phục vấn đề. Một tìm kiếm cho fuschia bao gồm các kết quả cho fuchsia tự động.
Daisy Sophia Hollman

104

Tôi đã tìm thấy bài viết này một thời gian trước: Làm thế nào để viết một sửa lỗi chính tả , được viết bởi Peter Norvig (Giám đốc nghiên cứu tại Google Inc.).

Đây là một bài đọc thú vị về chủ đề "sửa lỗi chính tả". Các ví dụ bằng Python nhưng rõ ràng và đơn giản để hiểu và tôi nghĩ rằng thuật toán có thể dễ dàng dịch sang các ngôn ngữ khác.

Dưới đây mô tả ngắn gọn về thuật toán. Thuật toán bao gồm hai bước, chuẩn bị và kiểm tra từ.

Bước 1: Chuẩn bị - thiết lập cơ sở dữ liệu từ

Tốt nhất là nếu bạn có thể sử dụng các từ tìm kiếm thực tế và sự xuất hiện của chúng. Nếu bạn không có một bộ văn bản lớn có thể được sử dụng thay thế. Đếm sự xuất hiện (phổ biến) của mỗi từ.

Bước 2. Kiểm tra từ - tìm các từ tương tự như kiểm tra từ

Tương tự có nghĩa là khoảng cách chỉnh sửa thấp (thường là 0-1 hoặc 0-2). Khoảng cách chỉnh sửa là số lần chèn / xóa / thay đổi / hoán đổi tối thiểu cần thiết để chuyển đổi từ này sang từ khác.

Chọn từ phổ biến nhất từ ​​bước trước và gợi ý từ đó là từ chỉnh sửa (nếu không phải là từ đó).


6
@Davide: "" "các ví dụ là bằng python nhưng thật dễ hiểu và đơn giản" "": Tôi không hiểu cách sử dụng của bạn "nhưng" ... Tôi muốn nói với phong cách viết của Python + Norvig, "rõ ràng và hiểu đơn giản "là kết quả mong đợi.
John Machin

20
"Nhưng" là ở đó bởi vì Harry nói trong câu hỏi của anh ấy rằng anh ấy là một nhà phát triển VB.NET, vì vậy tôi cho rằng anh ấy không tự tin với ngôn ngữ python.
Davide Gualano

56

Đối với lý thuyết về thuật toán "ý của bạn", bạn có thể tham khảo Chương 3 của Giới thiệu về truy xuất thông tin. Nó có sẵn trực tuyến miễn phí. Mục 3.3 (trang 52) trả lời chính xác câu hỏi của bạn. Và để trả lời cụ thể bản cập nhật của bạn, bạn chỉ cần một từ điển các từ và không có gì khác (bao gồm hàng triệu người dùng).


10

Hmm ... Tôi nghĩ rằng google đã sử dụng kho dữ liệu khổng lồ của họ (internet) để thực hiện một số NLP nghiêm trọng (Xử lý ngôn ngữ tự nhiên).

Ví dụ, họ có rất nhiều dữ liệu từ toàn bộ internet đến mức họ có thể đếm số lần xảy ra chuỗi ba từ (được gọi là bát quái ). Vì vậy, nếu họ thấy một câu như: "buổi hòa nhạc frugr màu hồng", họ có thể thấy nó có vài bản hit, sau đó tìm thấy "buổi hòa nhạc * màu hồng" có khả năng nhất trong kho văn bản của họ.

Họ dường như chỉ làm một biến thể của những gì Davide Gualano đang nói, vì vậy, chắc chắn đọc liên kết đó. Google tất nhiên sử dụng tất cả các trang web mà nó biết như một kho văn bản, do đó điều đó làm cho thuật toán của nó đặc biệt hiệu quả.


7

Tôi đoán là họ sử dụng kết hợp khoảng cách Levenshtein thuật toán và khối lượng dữ liệu họ thu thập được liên quan đến các tìm kiếm đang chạy. Họ có thể kéo một tập hợp các tìm kiếm có khoảng cách Levenshtein ngắn nhất từ ​​chuỗi tìm kiếm đã nhập, sau đó chọn một tìm kiếm có nhiều kết quả nhất.


6
Giả sử bạn có tổng số từ trị giá hàng tỷ trang web được lưu trữ. Không có cách nào dễ dàng để lập chỉ mục khoảng cách Levenshtein để truy xuất nhanh các trận đấu gần mà không tính khoảng cách Levenshtein vài tỷ lần cho mỗi từ được yêu cầu. Do đó, khoảng cách Levenshtein không được sử dụng nhiều trong tình huống này, ít nhất là trong giai đoạn đầu tiên, nơi Google cần thu hẹp từ hàng tỷ từ hiện tại thành những từ có khả năng sai chính tả của từ hiện tại. Nó chắc chắn có thể áp dụng Levenshtein như một bước sau khi nó đã tìm nạp các kết quả phù hợp.
thomasrutter

6

Thông thường một bộ sửa lỗi chính tả sản xuất sử dụng một số phương pháp để đưa ra một gợi ý chính tả. Một số thì:

  • Quyết định một cách để xác định xem có cần sửa lỗi chính tả hay không. Chúng có thể bao gồm không đủ kết quả, kết quả không đủ cụ thể hoặc chính xác (theo một số biện pháp), vv Sau đó:

  • Sử dụng một phần lớn văn bản hoặc một từ điển, trong đó tất cả, hoặc hầu hết được biết là viết đúng chính tả. Chúng dễ dàng được tìm thấy trực tuyến, ở những nơi như LingPipe . Sau đó, để xác định gợi ý tốt nhất bạn tìm một từ phù hợp gần nhất dựa trên một số biện pháp. Một trong những trực quan nhất là nhân vật tương tự. Những gì đã được thể hiện qua nghiên cứu và thử nghiệm là hai hoặc ba chuỗi ký tự khớp hoạt động tốt hơn. (bigram và bát quái). Để tiếp tục cải thiện kết quả, hãy cân nhắc điểm số cao hơn trong trận đấu ở đầu hoặc cuối từ. Vì lý do hiệu suất, hãy lập chỉ mục tất cả các từ này dưới dạng bát quái hoặc bigram, để khi bạn thực hiện tra cứu, bạn chuyển đổi sang n-gram và tra cứu thông qua hashtable hoặc trie.

  • Sử dụng phương pháp phỏng đoán liên quan đến lỗi bàn phím tiềm năng dựa trên vị trí ký tự. Vì vậy, "hwllo" phải là "xin chào" vì 'w' gần với 'e'.

  • Sử dụng khóa ngữ âm (Soundex, Metaphone) để lập chỉ mục các từ và tra cứu các chỉnh sửa có thể. Trong thực tế, điều này thường trả về kết quả tồi tệ hơn so với sử dụng lập chỉ mục n-gram, như được mô tả ở trên.

  • Trong mỗi trường hợp, bạn phải chọn hiệu chỉnh tốt nhất từ ​​danh sách. Đây có thể là một số liệu khoảng cách như levenshtein, số liệu bàn phím, v.v.

  • Đối với cụm từ nhiều từ, chỉ một từ có thể sai chính tả, trong trường hợp đó bạn có thể sử dụng các từ còn lại làm ngữ cảnh để xác định kết quả phù hợp nhất.


6

Sử dụng khoảng cách Levenshtein , sau đó tạo Cây số liệu (hoặc Cây mỏng) để lập chỉ mục các từ. Sau đó chạy truy vấn Hàng xóm gần nhất và bạn đã nhận được kết quả.


4

Google rõ ràng gợi ý các truy vấn có kết quả tốt nhất, không phải với các truy vấn được viết đúng chính tả. Nhưng trong trường hợp này, có lẽ một trình sửa lỗi chính tả sẽ khả thi hơn, Tất nhiên bạn có thể lưu trữ một số giá trị cho mỗi truy vấn, dựa trên một số số liệu về kết quả mà nó mang lại.

Vì thế,

  1. Bạn cần một từ điển (tiếng Anh hoặc dựa trên dữ liệu của bạn)

  2. Tạo một trellis từ và tính xác suất cho các chuyển đổi bằng từ điển của bạn.

  3. Thêm một bộ giải mã để tính toán khoảng cách lỗi tối thiểu bằng cách sử dụng lưới của bạn. Tất nhiên bạn nên quan tâm đến việc chèn và xóa khi tính toán khoảng cách. Điều thú vị là bàn phím QWERTY tối đa hóa khoảng cách nếu bạn nhấn các phím gần nhau. (Cae sẽ quay xe, cay sẽ biến mèo)

  4. Trả lại từ có khoảng cách tối thiểu.

  5. Sau đó, bạn có thể so sánh điều đó với cơ sở dữ liệu truy vấn của mình và kiểm tra xem có kết quả tốt hơn cho các kết quả khớp khác không.



3

Tôi đã thấy điều gì đó cách đây vài năm, vì vậy có thể đã thay đổi kể từ đó, nhưng rõ ràng họ đã bắt đầu bằng cách phân tích nhật ký của họ cho cùng một người dùng gửi các truy vấn rất giống nhau trong một khoảng thời gian ngắn và sử dụng máy học dựa trên cách người dùng đã sửa chúng tôi.


3

Như một phỏng đoán ... nó có thể

  1. tìm kiếm từ
  2. nếu không tìm thấy, hãy sử dụng một số thuật toán để cố gắng "đoán" từ đó.

Có thể là một cái gì đó từ AI như mạng Hopfield hoặc mạng lan truyền ngược hoặc một cái gì đó khác "nhận dạng dấu vân tay", khôi phục dữ liệu bị hỏng hoặc sửa lỗi chính tả như Davide đã đề cập ...


2

Đơn giản. Họ có hàng tấn dữ liệu. Họ có số liệu thống kê cho mọi thuật ngữ có thể, dựa trên mức độ thường xuyên được yêu cầu và những biến thể của nó thường mang lại kết quả mà người dùng nhấp vào ... vì vậy, khi họ thấy bạn gõ sai chính tả cho cụm từ tìm kiếm, họ sẽ tiếp tục và đề xuất câu trả lời bình thường hơn.

Trên thực tế, nếu lỗi chính tả có hiệu lực là thuật ngữ được tìm kiếm thường xuyên nhất, thì đại số sẽ đưa nó cho đúng.


1
Không ai nghi ngờ rằng Google có tất cả dữ liệu cần thiết để thực hiện việc này, nhưng câu hỏi đặt ra là hỏi chi tiết về cách Google đưa ra thuật toán để thực hiện việc này, với rất nhiều dữ liệu, trong một khoảng thời gian hợp lý. Họ sẽ có những ánh mắt tìm kiếm mỗi ngày - làm thế nào để họ dễ dàng xác định liệu một thuật ngữ tìm kiếm có phải là một 'sửa lỗi chính tả' của một từ khác, gần đây không? Yếu tố nào khiến Google quyết định rằng một thuật ngữ là lỗi chính tả của một thuật ngữ khác? Đây là những chi tiết thực hiện sẽ được quan tâm.
thomasrutter

2

liên quan đến câu hỏi của bạn làm thế nào để bắt chước hành vi mà không có hàng tấn dữ liệu - tại sao không sử dụng hàng tấn dữ liệu được thu thập bởi google? Tải xuống kết quả google sarch cho từ sai chính tả và tìm kiếm "Ý của bạn là:" trong HTML.

Tôi đoán đó là mashup ngày nay :-)


Bao lâu cho đến khi google ngăn bot của bạn cào? - hoặc Google sẽ không nhận thấy những ngày này?
Andrew Harry

Tôi không nghĩ họ sẽ chú ý nếu reqs / giây không quá cao.
Mauricio Scheffer

2

Ngoài các câu trả lời trên, trong trường hợp bạn muốn tự mình thực hiện một cái gì đó, đây là một gợi ý -

Thuật toán

Bạn có thể tìm thấy việc triển khai và tài liệu chi tiết của thuật toán này trên GitHub .

  • Tạo một hàng đợi ưu tiên với một bộ so sánh.
  • Tạo Cây Tìm kiếm Ternay và chèn tất cả các từ tiếng Anh (từ bài đăng của Norvig ) cùng với tần số của chúng.
  • Bắt đầu duyệt qua TST và với mỗi từ gặp phải trong TST, hãy tính Khoảng cách Levenshtein ( LD ) của nó từ input_word
  • Nếu LD 3 thì đặt nó vào Hàng đợi ưu tiên.
  • Tại trích xuất cuối cùng 10 từ từ hàng đợi ưu tiên và hiển thị.

1

Bạn muốn nói kiểm tra chính tả? Nếu đó là một trình kiểm tra chính tả chứ không phải là toàn bộ cụm từ thì tôi đã có một liên kết về kiểm tra chính tả nơi thuật toán được phát triển trong python. Kiểm tra liên kết này

Trong khi đó, tôi cũng đang làm việc trên dự án bao gồm tìm kiếm cơ sở dữ liệu bằng văn bản. Tôi đoán điều này sẽ giải quyết vấn đề của bạn


1

Đây là một câu hỏi cũ và tôi rất ngạc nhiên khi không ai đề xuất OP sử dụng Apache Solr.

Apache Solr là một công cụ tìm kiếm toàn văn mà bên cạnh nhiều chức năng khác cũng cung cấp các đề xuất kiểm tra chính tả hoặc truy vấn. Từ tài liệu :

Theo mặc định, trình kiểm tra chính tả Lucene sắp xếp các đề xuất trước tiên bằng điểm số từ tính toán khoảng cách chuỗi và thứ hai theo tần số (nếu có) của đề xuất trong chỉ mục.


0

Có một cấu trúc dữ liệu cụ thể - cây tìm kiếm ternary - tự nhiên hỗ trợ khớp một phần và khớp gần kề.


-1

Cách dễ nhất để tìm ra nó là lập trình động Google.

Đó là một thuật toán được mượn từ Truy xuất thông tin và được sử dụng nhiều trong tin sinh học hiện đại để xem hai chuỗi gen giống nhau như thế nào.

Giải pháp tối ưu sử dụng lập trình động và đệ quy.

Đây là một vấn đề rất được giải quyết với rất nhiều giải pháp. Chỉ cần google xung quanh cho đến khi bạn tìm thấy một số mã nguồn mở.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.