Monday 17 March 2014

LANGANA 2014 Mart Progress Report



LANGANA: Okuduğu metinleri anlayıp ilgili soruları cevaplayan programımda son gelişmeler:
1-      ÖZNE bulma algoritmasının doğru çalışması için gerekli bir altyapı çalışması-deyim işleme (phrase processing) tamamlandı.  Sorunu şu şekilde gösterebilirim:

SENTENCE NO = 29 ********************************************************

buf_sub_struct_list()------------------------------------------------------------

29                 0                     SENTENCE(==>CONJUNCTSUB(
29                 0                     0                     17474         Bağlaç         null               Fakat            null               null               null
ÖZNE =====>  Lennie
29                 1                     0                     0                     Özelİsim    null               Lennie        null               null               null
29                 2                     0                     47231         İsim              null               su                   nounExt     yun               %%=yun%
29                 3                     0                     23943         İsim              null                                   nounExt     ine                %%?in%&e
29                 4                     0                     46609         Fiil                 nsz                 solu              verbExt      maya            ::-maya:
ÖZNE =====>  devam
29                 5                     0                     13169         İsim              null               devam        null               null               null
29                 6                     0                     17153         Fiil                                        ed                  verbExt      iyordu         ::-iyor-du:
29                 7                     .END-SENTENCE)

buf_verbose_list()------------------------------------------------------------
 Fakat Lennie suyun içine solumaya devam ediyordu

LANGANA metini kelime kelime algıladığı için ‘devam etmek’ deyiminin belirttiği eylem-fiil yerine ‘devam’ kelimesini ‘isim’ olarak anlıyordu.

Bu hata düzeldiğinde:
SENTENCE NO = 29 ********************************************************

buf_sub_struct_list()------------------------------------------------------------

29                 0                     SENTENCE(==>CONJUNCTSUB(
29                 0                     0                     17474         Bağlaç         null               Fakat            null               null               null               null               null               null
ÖZNE =====>  Lennie
29                 1                     0                     0                     Özelİsim    null               Lennie        null               null               null               null               null               null
29                 2                     0                     47231         İsim              null               su                   nounExt     yun               %%=yun%                        null               null               null
29                 3                     0                     23943         İsim              null                                   nounExt     ine                %%?in%&e                     null               null               null
29                 4                     0                     46609         Fiil                 nsz                 solu              verbExt      maya            ::-maya:      null               null               null
29                 5                     0                     13169         İsim              null               devam        null               null               null               begFiil        13169         1
29                 6                     0                     17153         Fiil                                        ed                  verbExt      iyordu         ::-iyor-du: endFiil        13169         1
29                 7                     .END-SENTENCE)

buf_verbose_list()------------------------------------------------------------
 Fakat Lennie suyun içine solumaya devam ediyordu

Farkedilebileceği gibi, çözüm kitaptan okunmuş metinler veritabanına 3 yeni sütun eklenerek sağlanmıştır.  Daha önce parse edilen metinleri veritabanına yazığımı belirtmiştim.  Şimdi GetPhrasesFromDict2.java adlı bir programla, ana metinin her kelimesini 2’li, 3’lü ve 4’lü gruplar halinde sözlük veri tabanında arıyorum.  Eğer varsa ana metine ilişkin veri tabanı kayıtlarına eklediğim 3 yeni sütunu güncelliyerek, örn. ‘bomba gibi patlamak’ deyimi için
‘Phrase’ alanına:
begFiil 
Fiil
endFiil
ve ilgili satırlar için bu deyime ilişkin word_id ve mult_no değerlerini yazıyorum.

Daha sonra, FindSubjectOfSentence9.java adlı programımda yaptığım bazı değişkliklerle bu ‘Phrase’ sütununu kontrol edip kelime isimse bile eğer bir deyimin parçası ise onun bir özne parçası olamayacağına karar veriyorum.

2-      Deyim  çalışmasının yararı pek o kadar fazla değil ya da henüz yalnızca fiil deyimlerini dikkate aldığımdan etkisi pek görünmüyor.
Yeni sonuçlar:
0 - 100. cümleler arasında %72 başarı  (eskisi %68)
100 - 200 arasında %71 başarı (eskisi %68)
200 - 300 arasında %63 başarı (eskisi %55)

Hata kaynakları ise şöyleydi:
0 - 100 arasında (22 nesne, 0 deyim, 4 diğer)
100 - 200 arasında (2 zamir, 25 nesne, 0 deyim, 2 uzama)
200 - 300 arasında (31 nesne, 0 deyim, 6 complexity)

3-      Yukarıda görüldüğü gibi LANGANA’nın başarısı açısından bir dönüm noktasına gelmiş bulunuyorum.  NESNE tespitine başlamam ve bunu ÖZNE tespiti ile birlikte götürmem gerekiyor.  300 – 400. Cümleler arasında da yaptığım inceleme:
300 - 400 arasında (31 nesne, 4 diğer) ile %59 başarı gösterdi.
SONUÇ: NESNE tespitini başarırsam %90’ın üzerinde bir başarı elde ederim.

4-      Ayrıca ÖZNE ve NESNE tespitinde kazandığım tecrübelerin alt cümleler-tümleçlerin tespitine de yardımcı olacağına inanıyorum.  Tümleçlerin doğru tespiti özellikle Türkçe’de İngilizceye otomatik tercüme makinası yapımında önemli olacak.


En son fakat en önemsiz olmayan bir nokta:
LANGANAe yani LANGANA’nın İngilizce versiyonunu yapma çalışmam henüz İngilizce sözlüğü veri tabanına yükleme aşamasında.  973 bin 872 satırlık eski bir Webster sözlüğünü parse etmeye başladım.  Z harfi 2500 satır bitti.  İşin en zor aşamasını geçmek üzereyim, Y harfi yaklaşık 2800 satır ve ben 300 satır civarındayım.  Artık parserıma yeni eklemeler yapmaktan çok reduction-azaltma ve rasyonelleştirmeler yaparak ilerliyorum.  Önemi bir sorun, temel özellikler aynı kalmakla birlikte bir çok küçük farklı kullanımlar olması.  Parser’ın bütün bu farkları yakalaması gerekiyor-en azından veri tabanında erişilmesi gereken detaylar için...