TextCat, MediaWiki için CirrusSearch uzantısı tarafından kullanılan ve viki üzerinde arama sağlayan n-gram metin kategorizasyonuna dayalı bir dil algılama kitaplığıdır.

TextCat'in konuşlandırıldığı Vikipedi'lerde, çok az sonuç alan bir arama, dil tanımlaması için TextCat'e gönderilecektir. Sorgu için olası bir dil belirlenebilirse, ilgili Vikipedi de aranır ve sonuçlar da görüntülenir.

Şu anda Felemenkçe, İngilizce, Fransızca, Almanca, İtalyanca, Japonca, Portekizce, Rusça ve İspanyolca Vikipedi dillerinde kullanılmaktadır.

Örnek olarak, málvísindi (İzlandaca'da 'dilbilim') için İngilizce Vikipedi araması sonuç yok, bu nedenle İzlandaca Vikipedi'den sonuçlar gösteriliyor.

TextCat nasıl çalışır edit

TextCat, bir arama dizesinin dilini her dil için bir modelle karşılaştırarak belirlemeye çalışır. Bu modeller temelde, belirli bir dilde en yaygın olan n-gramların (metinde bulunan 1-5 harfli diziler) sıralı bir listesidir.

Örneğin, TextCat'in kullandığı Fransızca dil modeli adresinde görebileceğiniz gibi, "é" karakteri sıralamada (şu anda satır 41) İngilizce için model demekten daha yüksek görünüyor, burada bu karakter çok listenin alt kısmında (şu anda 3781 satır).

Dil tanımlaması genellikle daha kısa metin dizilerinde daha zordur ve arama sorguları genellikle bir düzine karakterden daha azdır. Bazı kelimeler doğası gereği belirsizdir (örneğin hem İngilizce hem de Fransızca'da "liaison" veya "magistrate" kelimeleri). Özel karakterler ve aksan işaretleri oldukça ayırt edici olabilir (Almanca "ß" veya Vietnamca "ế" gibi), ancak bazı ziyaretçiler belirli bir kelime öbeğini veya kelimeyi ararken özel karakterler kullanmazken, diğerleri bunu yapar.

İnsanların sorgularda kullandıkları dilin farklılıkları nedeniyle, mümkün olan yerlerde, dil modellerimiz gerçek sorgu örnekleri üzerine kuruludur. Diğer diller için, dildeki genel metin örnekleri olarak ilgili Vikipedi'deki maddeleri kullanıyoruz.

Viki aramasında TextCat'in sınırlamaları edit

Verimlilik, karmaşıklık veya doğruluk nedenleriyle TextCat'e koymamız gereken birkaç sınır vardır. Ve biraz sorun yaşadığı bazı şeyler var.

Belirli bir vikide TextCat tarafından değerlendirilen dillerin sayısını birkaç farklı nedenden dolayı sınırlıyoruz ve bu nedenle tam liste vikiye göre farklılık gösterir (viki başına geçerli liste için wgCirrusSearchTextcatLanguages bakın).

  • Daha az dili dikkate almak çok daha hızlıdır, bu nedenle yalnızca belirli bir vikideki sorgularda nispeten yaygın olan dilleri dikkate alırız. Bu nedenle, Japonca Vikipedi, dil algılaması yaparken İspanyolcayı dikkate almaz çünkü geçmişte İspanyolca'da bu kadar çok sorgu olmamıştır.
  • Bazı dillerin kafa karışıklığına neden olma olasılığı daha yüksektir, ancak aynı zamanda bu kadar sık ​​görülmezler, bu yüzden onları dikkate almayız. Örneğin, Felemenkçe ve Afrikaanca yakından ilişkilidir ve bu dillerdeki sorguların sıklıkla karıştırıldığı durumlar olabilir. Afrikaansca sorgularının yirmi katı kadar Hollandaca sorgusu varsa, ancak Felemenkçe sorguların yarısı yanlışlıkla Afrikaanca olarak tanımlanmışsa, Afrikaanca çıkarırız, çünkü on Afrikaanca sorgusunu kaçırmak 100 Hollandaca sorgusunu yanlış yapmaktan daha iyidir.

Yalnızca TextCat'ten döndürülen en fazla bir "en iyi" yanıtı dikkate alırız.

  • Ek Wiki'lerde arama yapmak hesaplama açısından pahalıdır, özellikle de bunlardan çok bir tanesini aradıysak. Ayrıca, daha düşük kaliteli dil eşleşmeleri için sonuçların anlamlı olma olasılığı daha düşüktür. Örneğin, belirli bir vikide bir referans eserin başlığında bulunan bir kelimenin yalnızca bir örneği olabilir.
  • Kullanıcı arayüzü perspektifinden, birden fazla vikiden sonuçların gösterilmesi karmaşıktır. Arama sonuçları sayfası zaten kalabalık olabilir ve arama ekibinde hiç UI/UX uzmanımız yok.
  • Genel olarak, TextCat'ten elde edilen sonuçlar belirsiz olduğunda, yani iki veya daha fazla dilin çok benzer şekilde puanlandığı "en iyi" yanıtın yanlış olma olasılığı çok daha yüksektir. Arama yapan kişiye yararlı ek sonuçlar sağlamaya çalıştığımız için, bu sonuçların çıkarılması doğruluğu artırır.

Benzer sorgular TextCat'ten farklı sonuçlar alabilir. Çizgiyi bir yere çizmelisiniz ve her zaman çizginin zıt taraflarına düşen ilişkili kelime çiftleri olacaktır.

  • TextCat, bulunduğunuz vikinin dili lehine ve İngilizce lehine bir önyargıya sahiptir. Belirli bir viki üzerindeki sorgular büyük olasılıkla o wikinin dilinde olacağından, bu dile bir destek veriyoruz. Örneğin, adorable İngilizce, Fransızca ve İspanyolca'da bir kelimedir. Felemenkçe Vikipedi'de İspanyolca (Fransızca ve İngilizce üzerinden) olarak tanımlanabilirken, İngilizce Vikipedi'de çok belirsiz olurdu, çünkü İngilizce hızlanıyor. (Bunun yalnızca varsayımsal bir örnek olduğuna dikkat edin; Felemenkçe Vikipedi'de TextCat'in çağrılması için adorable için çok fazla sonuç var.)
    • Yalnızca vikinin dilini desteklemekle kalmayıp, aynı zamanda sorgularda görülen en yaygın ikinci dili de sağlamanın iyi olduğu ortaya çıktı. Diğer tüm vikiler için bu İngilizce olur. (İngilizce Vikipedi'de en yaygın olanı Çince'dir.)
  • Çünkü büyük harf kullanımı biraz önemlidir. Bir cümlenin ortasında büyük harfle yazılırsa Folklore İngilizceden biraz daha fazla olasıdır; örneğin, farklı büyük harf kullanımları arasındaki farkın belirsizlik eşiğini aştığı durumlar her zaman olacaktır. Dolayısıyla, Folklore zar zor Almanca olarak tanınırken, folklore Almanca ve İngilizce arasında çok belirsizdir ve görmezden gelinir.

TextCat için Çince ve Korece beklediğinizden daha zordur. Sorgu Çince karakterlerden başka bir şey değilse, muhtemelen Çince'dir, değil mi? Similarly if it’s all Korean characters. Benzer şekilde, tamamı Korece karakterler ise. Bununla birlikte, TextCat'in n-gram modeli, çok sayıda tekil Unicode karakterli sistemler yazmak için (Korece'de on bir bin, Çince'de onbinlerce karakter vardır), hepsinin modelde olmadığı anlamına gelir. Ve insanlar Vikipedi'de sık sık "ilginç" şeyler aradıklarından, zaman zaman sorgularda daha nadir karakterlerin ortaya çıkması pek olası değildir. Büyük metin parçaları için, daha yaygın karakterlerin ortaya çıkması neredeyse kesindir, ancak kısa sorgularda bunlar olmayabilir. Sorguya birkaç Latin karakter ekleyin ve sonuç birdenbire çok belirsiz hâle gelebilir.

Geliştirme ve teknik detaylar edit

Gerekçe edit

İnsanlar bazen aradıkları wiki dilinde olmayan kelimeleri kullanarak arama yaparlar. Sometimes it works (e.g., Луковичная глава, Unión de Radioaficionados Españoles, or 汉语 on English Wikipedia), and sometimes it doesn't (e.g., force électromotrice on English Wikipedia)—but would if we could redirect the query to the right wiki in the same language as the query (e.g., force électromotrice on French Wikipedia). In order to do that we need to be able to detect the language of the query.

Origins and development edit

The original version of TextCat is a Perl library developed by Gertjan van Noord, based on a 1994 paper by Cavnar and Trenkle. The original TextCat is relatively lightweight and reasonably accurate, compared to other language identification libraries available when the search team first looked into using language identification.

The Wikimedia Foundation maintains a PHP port of this library available as a Composer package. It is used by the CirrusSearch extension for MediaWiki.

The PHP port has several new features that take advantage of a couple of decades of improvements to computer hardware to use much larger and more accurate language models, use Unicode, and to otherwise improve the ability of TextCat’s n-gram models to distinguish between languages while remaining relatively lightweight.

There is also an updated Perl version maintained by Trey Jones which also has all of the new features of the updated PHP version.

Training data edit

To understand what makes a language look (or not look) like a particular language, training data was developed based upon historical query strings. These query strings were run against TextCat and used to build up the model for a given language. These corpora of text, sanitized from bots and errant searches, helped to 'teach' TextCat what n-grams commonly appear in a language. Using query data for training, rather than general text like Wikipedia article text, also gives more positive results in testing and improves the accuracy of the language detection for queries.

The PHP port of TextCat includes models built on query data (for use with queries), and models built on general Wikipedia article text, which may be more useful for generic language detection.

Maintenance edit

You can find tasks related to TextCat in Phabricator.

Updating the library edit

In order to update the deployment library once a change has been merged into the library repository:

  1. Tag the library with the new version and push the tag
  2. Check on wikimedia/textcat that the tag is updated
  3. Update composer.json in extension/CirrusSearch
  4. Test on non-production install that after composer update --no-dev everything runs smoothly
  5. Check out mediawiki/vendor repo
  6. Edit composer.json and put new version of wikimedia/textcat there
  7. Run composer update --no-dev
  8. Make patch of the changes and put it to review on Gerrit.

See also edit

External Links edit