Filtering conversation by filter type and value
I want to mention only one thing especially:

You're using "magic string" to choose your filter types. Instead of doing that (because it's brittle) you are probably better off with an enum:

public enum FilterType {
    USER, WORD, HIDE_WORD
}


Your code would have to adjust a little, but to give a short look into the filter method:

private void filter(Filter filter, Conversation conversation, String outputFilePath) {
    switch (filter.filterType) {
        case FilterType.USER:
            conversation = Filter.filterByUser(conversation, filter.argumentValue);
            writeConversation(conversation, outputFilePath);
            break;
        case FilterType.WORD:
            conversation = Filter.filterByWord(conversation filter.argumentValue);
            writeConversation(conversation, outputFilePath);
            break;
        // ...


This exposes another small improvement possibility in your code.

In every case you will call this.writeConversation with exactly the same arguments. You can move that to outside the switch-case block:

switch (filter.filterType) {
    // ...
}
this.writeConversation(conversation, outputFilePath);


Another last thing I want to recommend is using Path intead of String to refer to outputFilePath. This makes it blatantly obvious, that you're  actually referring to a File. Strings are .. not Paths...