The co-referencer we used used to have in opennlp-tools has a model to
detect the gender of names. That could could be extracted and put into a
stand alone component.

Jörn

On Mon, Jul 4, 2016 at 2:41 PM, Joern Kottmann <[email protected]> wrote:

> I was speaking about the second case. We could build a dedicated component
> specialized in extracting properties about already detected entities.
>
> Jörn
>
> On Mon, Jul 4, 2016 at 2:33 PM, Damiano Porta <[email protected]>
> wrote:
>
>> Hello Jorn,
>> Do you mean that i need to "extend" my NER model to find other
>> name-related
>> entities too?
>>
>> OR
>>
>> Find the entities with a dictionary and then train a maxent model that
>> finds other properties like person title, job position etc?
>>
>> Thanks for the clarification.
>>
>>
>> 2016-07-04 12:15 GMT+02:00 Joern Kottmann <[email protected]>:
>>
>> > Hello,
>> >
>> > there are also other interesting properties e.g. person title (e.g.
>> > professor, doctor), job title/position,
>> > company legal form. And much more for other entity types.
>> >
>> > Maybe it would be worth it to build a dedicated component to extract
>> > properties from entities.
>> >
>> > Jörn
>> >
>> > On Fri, Jul 1, 2016 at 3:05 PM, Mondher Bouazizi <
>> > [email protected]
>> > > wrote:
>> >
>> > > Hi,
>> > >
>> > > Sorry for my late reply. I didn't understand well your last email, but
>> > here
>> > > is what I meant:
>> > >
>> > > Given a simple dictionary you have that has the following columns:
>> > >
>> > > Name           Type           Gender
>> > > Agatha         First           F
>> > > John            First           M
>> > > Smith          Both           B
>> > >
>> > > where:
>> > > - "First" refers to first name, "Last" (not in the example) refers to
>> > last
>> > > name, and Both means it can be both.
>> > > - "F" refers to female, "M" refers to males, and "B" refers to both
>> > > genders.
>> > >
>> > > and given the following two sentences:
>> > >
>> > > 1. "It was nice meeting you John. I hope we meet again soon."
>> > >
>> > > 2. "Yes, I met Mrs. Smith. I asked her her opinion about the case and
>> > felt
>> > > she knows something"
>> > >
>> > > In the first example, when you check in the dictionary, the name
>> "John"
>> > is
>> > > a male name, so no need to go any further.
>> > > However, in the second example, the name "Smith", which is a family
>> name
>> > in
>> > > our case, can be fit for both, males and females. Therefore, we need
>> to
>> > > extract features from the surrounding context and perform a
>> > classification
>> > > task.
>> > > Here are some of the features I think they would be interesting to
>> use:
>> > >
>> > > . Presence of a male initiative before the word {True, False}
>> > > . Presence of a female initiative before the word {True, False}
>> > >
>> > > . Gender of the first personal pronoun (subject or object form) to the
>> > > right of the name    Values={MALE, FEMALE, UNCERTAIN, EMPTY}
>> > > . Distance between the name and the first personal pronoun to the
>> right
>> > (in
>> > > words)         Values=NUMERIC
>> > > . Gender of the second personal pronoun to the right of the
>> > > name                                 Values={MALE, FEMALE, UNCERTAIN,
>> > > EMPTY}
>> > > . Distance between the name and the second personal pronoun right
>> > >                  Values=NUMERIC
>> > > . Gender of the third personal pronoun to the right of the
>> > > name                                      Values={MALE, FEMALE,
>> > UNCERTAIN,
>> > > EMPTY}
>> > > . Distance between the name and the third personal pronoun right (in
>> > > words)                  Values=NUMERIC
>> > >
>> > > . Gender of the first personal pronoun (subject or object form) to the
>> > left
>> > > of the name       Values={MALE, FEMALE, UNCERTAIN, EMPTY}
>> > > . Distance between the name and the first personal pronoun to the left
>> > (in
>> > > words)            Values=NUMERIC
>> > > . Gender of the second personal pronoun to the left of the
>> > > name                                    Values={MALE, FEMALE,
>> UNCERTAIN,
>> > > EMPTY}
>> > > . Distance between the name and the second personal pronoun left
>> > >                     Values=NUMERIC
>> > > . Gender of the third personal pronoun to the left of the
>> > > name                                        Values={MALE, FEMALE,
>> > > UNCERTAIN, EMPTY}
>> > > . Distance between the name and the third personal pronoun left (in
>> > > words)                    Values=NUMERIC
>> > >
>> > > In the second example here are the values you have for your features
>> > >
>> > > F1 = False
>> > > F2 = True
>> > > F3 = UNCERTAIN
>> > > F4 = 1
>> > > F5 = FEMALE
>> > > F6 = 3
>> > > F7 = FEMALE
>> > > F8 = 4
>> > > F9 = UNCERTAIN
>> > > F10 = 2
>> > > F11 = EMPTY
>> > > F12 = 0
>> > > F13 = EMPTY
>> > > F14 = 0
>> > >
>> > > Of course the choice of features depends on the type of data, and the
>> > > features themselves might not work well for some texts such as ones
>> > > collected from twitter for example.
>> > >
>> > > I hope this help you.
>> > >
>> > > Best regards
>> > >
>> > > Mondher
>> > >
>> > >
>> > > On Thu, Jun 30, 2016 at 7:42 PM, Damiano Porta <
>> [email protected]>
>> > > wrote:
>> > >
>> > > > Hi Mondher,
>> > > > could you give me a raw example to understand how i should train the
>> > > > classifier model?
>> > > >
>> > > > Thank you in advance!
>> > > > Damiano
>> > > >
>> > > >
>> > > > 2016-06-30 6:57 GMT+02:00 Mondher Bouazizi <
>> [email protected]
>> > >:
>> > > >
>> > > > > Hi,
>> > > > >
>> > > > > I would recommend a hybrid approach where, in a first step, you
>> use a
>> > > > plain
>> > > > > dictionary and then perform the classification if needed.
>> > > > >
>> > > > > It's straightforward, but I think it would present better
>> > performances
>> > > > than
>> > > > > just performing a classification task.
>> > > > >
>> > > > > In the first step you use a dictionary of names along with an
>> > attribute
>> > > > > specifying whether the name fits for males, females or both. In
>> case
>> > > the
>> > > > > name fits for males or females exclusively, then no need to go any
>> > > > further.
>> > > > >
>> > > > > If the name fits for both genders, or is a family name etc., a
>> second
>> > > > step
>> > > > > is needed where you extract features from the context (surrounding
>> > > words,
>> > > > > etc.) and perform a classification task using any machine learning
>> > > > > algorithm.
>> > > > >
>> > > > > Another way would be using the information itself (whether the
>> name
>> > > fits
>> > > > > for males, females or both) as a feature when you perform the
>> > > > > classification.
>> > > > >
>> > > > > Best regards,
>> > > > >
>> > > > > Mondher
>> > > > >
>> > > > > I am not sure
>> > > > >
>> > > > > On Wed, Jun 29, 2016 at 10:27 PM, Damiano Porta <
>> > > [email protected]>
>> > > > > wrote:
>> > > > >
>> > > > > > Awesome! Thank you so much WIlliam!
>> > > > > >
>> > > > > > 2016-06-29 13:36 GMT+02:00 William Colen <
>> [email protected]
>> > >:
>> > > > > >
>> > > > > > > To create a NER model OpenNLP extracts features from the
>> context,
>> > > > > things
>> > > > > > > such as: word prefix and suffix, next word, previous word,
>> > previous
>> > > > > word
>> > > > > > > prefix and suffix, next word prefix and suffix etc.
>> > > > > > > When you don't configure the feature generator it will apply
>> the
>> > > > > default:
>> > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://opennlp.apache.org/documentation/1.6.0/manual/opennlp.html#tools.namefind.training.featuregen.api
>> > > > > > >
>> > > > > > > Default feature generator:
>> > > > > > >
>> > > > > > > AdaptiveFeatureGenerator featureGenerator = *new*
>> > > > > CachedFeatureGenerator(
>> > > > > > >          *new* AdaptiveFeatureGenerator[]{
>> > > > > > >            *new* WindowFeatureGenerator(*new*
>> > > > TokenFeatureGenerator(),
>> > > > > 2,
>> > > > > > > 2),
>> > > > > > >            *new* WindowFeatureGenerator(*new*
>> > > > > > > TokenClassFeatureGenerator(true), 2, 2),
>> > > > > > >            *new* OutcomePriorFeatureGenerator(),
>> > > > > > >            *new* PreviousMapFeatureGenerator(),
>> > > > > > >            *new* BigramNameFeatureGenerator(),
>> > > > > > >            *new* SentenceFeatureGenerator(true, false)
>> > > > > > >            });
>> > > > > > >
>> > > > > > >
>> > > > > > > These default features should work for most cases (specially
>> > > > English),
>> > > > > > but
>> > > > > > > they of course can be incremented. If you do so, your model
>> will
>> > > take
>> > > > > new
>> > > > > > > features in account. So yes, you are putting the features in
>> your
>> > > > > model.
>> > > > > > >
>> > > > > > > To configure custom features is not easy. I would start with
>> the
>> > > > > default
>> > > > > > > and use 10-fold cross-validation and take notes of its
>> > > effectiveness.
>> > > > > > Than
>> > > > > > > change/add a feature, evaluate and take notes. Sometimes a
>> > feature
>> > > > that
>> > > > > > we
>> > > > > > > are sure would help can destroy the model effectiveness.
>> > > > > > >
>> > > > > > > Regards
>> > > > > > > William
>> > > > > > >
>> > > > > > >
>> > > > > > > 2016-06-29 7:00 GMT-03:00 Damiano Porta <
>> [email protected]
>> > >:
>> > > > > > >
>> > > > > > > > Thank you William! Really appreciated!
>> > > > > > > >
>> > > > > > > > I only do not get one point, when you said "You could
>> increment
>> > > > your
>> > > > > > > > model using
>> > > > > > > > Custom Feature Generators" does it mean that i can "put"
>> these
>> > > > > features
>> > > > > > > > inside ONE *.bin* file (model) that implement different
>> things,
>> > > or,
>> > > > > > name
>> > > > > > > > finder is one thing and those feature generators other?
>> > > > > > > >
>> > > > > > > > Thank you in advance for the clarification.
>> > > > > > > >
>> > > > > > > > 2016-06-29 1:23 GMT+02:00 William Colen <
>> > [email protected]
>> > > >:
>> > > > > > > >
>> > > > > > > > > Not exactly. You would create a new NER model to replace
>> > yours.
>> > > > > > > > >
>> > > > > > > > > In this approach you would need a corpus like this:
>> > > > > > > > >
>> > > > > > > > > <START:personMale> Pierre Vinken <END> , 61 years old ,
>> will
>> > > join
>> > > > > the
>> > > > > > > > board
>> > > > > > > > > as a nonexecutive director Nov. 29 .
>> > > > > > > > > Mr . <START:personMale> Vinken <END> is chairman of
>> Elsevier
>> > > > N.V. ,
>> > > > > > the
>> > > > > > > > > Dutch publishing group . <START:personFemale> Jessie
>> Robson
>> > > <END>
>> > > > > is
>> > > > > > > > > retiring , she was a board member for 5 years .
>> > > > > > > > >
>> > > > > > > > >
>> > > > > > > > > I am not an English native speaker, so I am not sure if
>> the
>> > > > example
>> > > > > > is
>> > > > > > > > > clear enough. I tried to use Jessie as a neutral name and
>> > "she"
>> > > > as
>> > > > > > > > > disambiguation.
>> > > > > > > > >
>> > > > > > > > > With a corpus big enough maybe you could create a model
>> that
>> > > > > outputs
>> > > > > > > both
>> > > > > > > > > classes, personMale and personFemale. To train a model you
>> > can
>> > > > > follow
>> > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://opennlp.apache.org/documentation/1.6.0/manual/opennlp.html#tools.namefind.training
>> > > > > > > > >
>> > > > > > > > > Let's say your results are not good enough. You could
>> > increment
>> > > > > your
>> > > > > > > > model
>> > > > > > > > > using Custom Feature Generators (
>> > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://opennlp.apache.org/documentation/1.6.0/manual/opennlp.html#tools.namefind.training.featuregen
>> > > > > > > > > and
>> > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://opennlp.apache.org/documentation/1.6.0/apidocs/opennlp-tools/opennlp/tools/util/featuregen/package-summary.html
>> > > > > > > > > ).
>> > > > > > > > >
>> > > > > > > > > One of the implemented featuregen can take a dictionary (
>> > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://opennlp.apache.org/documentation/1.6.0/apidocs/opennlp-tools/opennlp/tools/util/featuregen/DictionaryFeatureGenerator.html
>> > > > > > > > > ).
>> > > > > > > > > You can also implement other convenient FeatureGenerator,
>> for
>> > > > > > instance
>> > > > > > > > > regex.
>> > > > > > > > >
>> > > > > > > > > Again, it is just a wild guess of how to implement it. I
>> > don't
>> > > > know
>> > > > > > if
>> > > > > > > it
>> > > > > > > > > would perform well. I was only thinking how to implement a
>> > > gender
>> > > > > ML
>> > > > > > > > model
>> > > > > > > > > that uses the surrounding context.
>> > > > > > > > >
>> > > > > > > > > Hope I could clarify.
>> > > > > > > > >
>> > > > > > > > > William
>> > > > > > > > >
>> > > > > > > > > 2016-06-28 19:15 GMT-03:00 Damiano Porta <
>> > > [email protected]
>> > > > >:
>> > > > > > > > >
>> > > > > > > > > > Hi William,
>> > > > > > > > > > Ok, so you are talking about a kind of pipe where we
>> > execute:
>> > > > > > > > > >
>> > > > > > > > > > 1. NER (personM for example)
>> > > > > > > > > > 2. Regex (filter to reduce false positives)
>> > > > > > > > > > 3. Plain dictionary (filter as above) ?
>> > > > > > > > > >
>> > > > > > > > > > Yes we can split out model in two for M and F, it is
>> not a
>> > > big
>> > > > > > > problem,
>> > > > > > > > > we
>> > > > > > > > > > have a database grouped by gender.
>> > > > > > > > > >
>> > > > > > > > > > I only have a doubt regarding the use of a dictionary.
>> > > Because
>> > > > if
>> > > > > > we
>> > > > > > > > use
>> > > > > > > > > a
>> > > > > > > > > > dictionary to create the model, we could only use it to
>> > > detect
>> > > > > > names
>> > > > > > > > > > without using NER. No?
>> > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > > > 2016-06-29 0:10 GMT+02:00 William Colen <
>> > > > [email protected]
>> > > > > >:
>> > > > > > > > > >
>> > > > > > > > > > > Do you plan to use the surrounding context? If yes,
>> maybe
>> > > you
>> > > > > > could
>> > > > > > > > try
>> > > > > > > > > > to
>> > > > > > > > > > > split NER in two categories: PersonM and PersonF.
>> Just an
>> > > > idea,
>> > > > > > > never
>> > > > > > > > > > read
>> > > > > > > > > > > or tried anything like it. You would need a training
>> > corpus
>> > > > > with
>> > > > > > > > these
>> > > > > > > > > > > classes.
>> > > > > > > > > > >
>> > > > > > > > > > > You could add both the plain dictionary and the regex
>> as
>> > > NER
>> > > > > > > features
>> > > > > > > > > as
>> > > > > > > > > > > well and check how it improves.
>> > > > > > > > > > >
>> > > > > > > > > > > 2016-06-28 18:56 GMT-03:00 Damiano Porta <
>> > > > > [email protected]
>> > > > > > >:
>> > > > > > > > > > >
>> > > > > > > > > > > > Hello everybody,
>> > > > > > > > > > > >
>> > > > > > > > > > > > we built a NER model to find persons (name) inside
>> our
>> > > > > > documents.
>> > > > > > > > > > > > We are looking for the best approach to understand
>> if
>> > the
>> > > > > name
>> > > > > > is
>> > > > > > > > > > > > male/female.
>> > > > > > > > > > > >
>> > > > > > > > > > > > Possible solutions:
>> > > > > > > > > > > > - Plain dictionary?
>> > > > > > > > > > > > - Regex to check the initial and/letters of the
>> name?
>> > > > > > > > > > > > - Classifier? (naive bayes? Maxent?)
>> > > > > > > > > > > >
>> > > > > > > > > > > > Thanks
>> > > > > > > > > > > >
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>>
>
>

Reply via email to