Açık Hack '20
Demo
·
Sunum
·
Model
Müzelerde ziyaretçilerin eserler ve tarihi olaylar hakkında bilgi edinmede sıkıntı çekmesi, bilgi edinmek için kişi veya kaynak bulmakta zorlanılması. Bu yüzden müze memnuniyetinin düşmesine ve kötü görüşler oluşmasına sebep olur.
Müze ziyaretçileri ile interaktif iletişime geçen ve müze hakkında bilgi sağlayan bir bireysel asistan geliştirmeyi hedefliyoruz.
2018 yılında, Google Bidirectional Encoder Representations from Transformers, kısaca BERT olarak bahsedilen modelini duyurdu. Adından da anlaşıldığı üzere cümleyi hem soldan sağa hem de sağdan sola olarak değerlendiriyor. Bu özelliği ile diğer modellere kıyasla, anlamı ve kelimelerin birbiriyle olan ilişkileri daha iyi çıkarmayı planlıyor ve bunu başarıyor.
BERT, çift-yönlü olması dışında Masked Language Modeling (MLM) ve Next Sentence Prediction (NSP) adı verilen iki teknikle eğitiliyor. İlk teknikte, cümle içerisindeki kelimeler arasındaki ilişki üzerinde durulurken, ikinci teknik olan NSP’de ise cümleler arasındaki ilişki kurulur. Training esnasında ikili olarak gelen cümle çiftinde, ikinci cümlenin ilk cümlenin devamı olup olmadığı tahmin edilir. Bu teknikten önce ikinci cümlelerin %50'si rastgele değiştirilir, %50'si ise aynı şekilde bırakılır. Training esnasındaki optimizasyon, bu iki tekniğin kullanılırken ortaya çıkan kaybın minimuma indirilmesidir.
BERT 800M kelime hazinesine sahip olan BookCorpus ve 2.5B kelime hazinesine sahip olan Wikipedia veriseti kullanılarak bert_large ve bert_base adı verilen 2 temel modele sahiptir. BERT kendi başına GLM adı verilen, birden fazla problemde kullanılabilecek şekilde tasarlanmış bir model.
- Çift yönlü kodlayıcı, BERT’i OpenAI GPT’den ve ELMo’dan ayırır.
- 24 Transformer bloğu, 1024 gizli katmanı ve 340M parametresi ile oldukça büyük bir modeldir.
- BooksCorpus (800 milyon kelime) ve İngilizce Wikipedia (2.5 milyar kelime) dahil, toplam 3.3 milyar kelimelik bir korpus üzerinden 40 epoch ile önceden eğitilmiştir.
- Herhangi bir kelimenin sağındaki ve solundaki kelimelerle olan ilişkisini çok iyi kavrıyor ve MLM ve NSP sayesinde içeriği iyi bir şekilde öğreniyor.
- Türkçe dil desteğine sahip, önceden eğitilmiş bir modeldir.
Tüm bu sebeplerden kaynaklı olarak biz Google tarafından geliştirilen BERT modelini kullanıyoruz.
Bu projenin merkezi soru-cevap işlemine dayanmaktadır. Modelimizin çalışmasını inceleyecek olursak.
soru = "Tablonun boyutu"
acıklama_metni = '''Mona Lisa tablosunda resmedilmiş kişinin gerçek ismi Lisa Gherardini.
Mona Lisa, “benim kadınım Lisa” anlamına geliyor.
Orijinal tablonun boyutları 77×53 cm. '''
Açıklama metinimiz ve sorumuzu tanımladık. Önceden eğitilmiş modelimiz sayesinde sorunun cevabını bulmaya çalışacağız. Bunun için model ve tokenizer işlemlerini yapmamız gerekmektedir.
output_dir = 'model'
model = BertForQuestionAnswering.from_pretrained(output_dir)
tokenizer = BertTokenizer.from_pretrained(output_dir)
Tanımlama işleminin ardından oluşturduğumuz fonksiyon aracılığı ile sorunun cevabını bulmaya çalışacağız.
answer, score = answer_question(soru, acıklama_metni)
Modelin bize verdiği cevap "77×53 cm ."
Modelin cevabı nasıl bulduğundan bahsetmek gerekirse,
Verilen metinin içerisinden, her bir token'ın cevab cümlesini için başlangıç ve bitiş belirlemesi gerekmektedir. Soru ile metin uyumlu ise cevap dönecektir. Değil ise dönmeyecektir. Soru ve metin uyumlu olsa bile kelimelerin arasındaki ilişki cevap olma olasılını değiştirecektir.
Oğuzcan Turan | Meva Akkaya | Y. Burak Akkaş |
---|---|---|
Derin Öğrenme Geliştirici | Derin Öğrenme Geliştirici | Full Stack Geliştirici |
github.com/canturan10 |
github.com/akkayameva |
github.com/burakakkas |
linkedin.com/canturan10 |
linkedin.com/akkayameva |
linkedin.com/burakakkas |
can.turan.10@gmail.com |
akkayameva@gmail.com |
burakakkas55@gmail.com |
Bu, yazılımı kullanmak için gerekli olan kütüphaneleri yüklemelisiniz.
pip install -r requirements.txt
Veya
pip install Flask
pip install Flask-SQLAlchemy
pip install opencv-python
pip install transformers
pip install python-telegram-bot
pip install torch
pip install pyzbar
Kullanılan Veri Tabanı ve Model'in doğru şekilde tanımlanması gerekmektedir. app.py dosyası içerisinde veritabanı ve model aşağıdaki gibi tanımlanır.
################ Tanımlama ################
logging.getLogger().setLevel(logging.INFO)
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
output_dir = 'model'
model = BertForQuestionAnswering.from_pretrained(output_dir)
tokenizer = BertTokenizer.from_pretrained(output_dir)
Web uygulamasının çalışması için '5000' portunun açık olması gerekmektedir. Eğer port müsait değilse,
if __name__ == '__main__':
app.run(debug='true')
web uygulamamızı çalıstırmak için ihtiyaç duyduğumuz bu kod satırı açık olan portunuz ile aşağıdaki gibi güncellenebilir.
if __name__ == '__main__':
app.run(debug='true', port=5050)
Sonrasında web uygulamamız çalışacaktır.
* Serving Flask app "app.py"
* Environment: development
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Kullanılan Model ve Telegram Bot Token'ının doğru şekilde tanımlanması gerekmektedir. bot.py dosyası içerisinde token ve model aşağıdaki gibi tanımlanır.
################ Tanımlama ################
logging.getLogger().setLevel(logging.INFO)
PHOTO, QUESTION = range(2)
TOKEN = "token"
updater = Updater(TOKEN, use_context=True)
output_dir = 'model'
model = BertForQuestionAnswering.from_pretrained(output_dir)
tokenizer = BertTokenizer.from_pretrained(output_dir)
Veri tabanı bağlantımızı sağlamak için aşağıdaki şekilde bağlantıyı sağlamalıyız.
################ DB Baglantısı ###############
connection = sqlite3.connect('database.db', check_same_thread=False)
cursor = connection.cursor()
Telegram botu oluşturma ve token elde etmek için buradan ilgili sayfaya ulaşabilirsiniz.
Sonrasından Telegram Botumuz çalışacaktır.
Videoyu izlemek için gif'e tıklayabirsin. Yada buradan ulaşabilirsin.
Objelere ait QR kodlardan seçtiklerimiz aşağıdadır. Diğerlere buradan erişebilirsiniz.
Bu proje MIT lisanslıdır.
Projenin geliştirilmesinde kullanılan kaynaklar aşağıdaki gibidir.
- BERT: https://github.com/google-research/bert
- BERT-base (Turkish): https://huggingface.co/dbmdz/bert-base-turkish-uncased
- BERT-QA (Turkish): https://huggingface.co/savasy/bert-base-turkish-squad
- TQuAD dataset: https://github.com/TQuad/turkish-nlp-qa-dataset
Proje veya model ile ilgili sorun yaşarsanız bizlere ulaşabilirsiniz.
Projemizin gelişiminde bizlere yardımcı olan sevgili mentörlerimize teşekkürü borç biliriz.
Copyright © 2020 Susam Sokağı.